Desde Android API Nivel 15 existe el methodpublic Drawable getDrawableForDensity (int id, int density)
para recuperar un objeto dibujable para una densidad de pantalla específica. ¿Hay alguna forma de hacer esto antes de API Nivel 15?Obtenga dibujable para la densidad para Nivel de API <15
Respuesta
Así que en realidad pensé que podría resolverse utilizando la ingeniería inversa de las API de Android y el código fuente según la sugerencia de @ adtennant. Empecé a escribir la solución, pero en el proceso llegué a un callejón sin salida ya que una API nativa subyacente (que no es Java) que es necesaria no está disponible en las versiones posteriores de Android.
Si está bien limitar esto solo a Bitmaps, como implica su comentario, es posible hacer esto con BitmapFactory como se sugiere. BitmapFactory tiene otro método:
decodeResource(Resources res, int id, BitmapFactory.Options opts)
Este método acepta la BitmapFactory.Options adicional que le permitirá especificar la densidad de carga. Esto parece haber existido desde el nivel API 1. En concreto, creo que se puede utilizar:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inDensity = DisplayMetrics.DENSITY_MEDIUM; // whichever you want to load
options.inTargetDensity = getResources().getDisplayMetrics().densityDpi;
options.inScaled = true;
Esto también reduce la escala de la densidad de la pantalla si se ha cargado una densidad no coincidentes.
- 1. android decodeResource devuelve null para xml bitmap - API nivel 7
- 2. ¿La mejor API para audio de bajo nivel en Windows?
- 3. Android Equalizer para API Level <9
- 4. Si se proporciona un recurso dibujable para ldpi, mdpi, hdpi, xhdpi, este dibujable no necesita proporcionarse para nodpi?
- 5. Como layout-sw600dp, alternativa para dibujable
- 6. SQL Obtenga la primera ocurrencia del día 15 para una fecha
- 7. Android - TimePicker minutos para 15
- 8. Rotación ImageView en Android <API nivel 11
- 9. API de audio de bajo nivel para Android
- 10. configuración de densidad personalizada para un emulador
- 11. ¿Resumen de cambios para cada nivel de API?
- 12. ¿Admite sybase 15 la API de bcp en java?
- 13. Google Analytics, obtenga anotaciones de la API
- 14. ¿SimpleCursorAdapter desaprobado en API versión 15?
- 15. Obtenga el nivel de confianza de ASP.NET actual programáticamente
- 16. dibujable == dibujable?
- 17. Android 4.0 - Nivel de API 14 vs API de Google (Google Inc.) - Nivel de API 14: ¿Cuál es la diferencia?
- 18. API de Google, obtenga valor de la tabla de datos
- 19. Obtenga información de la versión para .exe
- 20. ¿Qué significa nivel de API?
- 21. Android: resoluciones dibujable
- 22. tabStripEnabled para TabWidget en la API anterior
- 23. Obtenga TeamCity para construir la última etiqueta
- 24. Styling EditText vista con forma dibujable para que parezca un nuevo tema holográfico para Android <3.0
- 25. Eclipse Android Nivel de API de cambio
- 26. aplicación wpf para transmitir video con retraso de 15 segundos
- 27. Excepción de $ NotFoundException de recursos para dibujable, pero ¿existe?
- 28. Autenticación de la API de Google para el servidor
- 29. Convertir cadena en dibujable
- 30. Google Maps API - Obtenga las coordenadas de la dirección
No intente ser denso, pero ¿por qué no puede simplemente obtener el Drawable por su nombre simple (resource ID) y dejar que el sistema operativo encuentre el correcto? – Sparky
Eso funciona bien para mis diseños XML, pero cuando cargo el mapa de bits a través de BitmapFactory.decodeResource (Resources res, int id) muestra el bitmap con una resolución más pequeña. Tal vez eso tiene que ver con escalar el BitmapFactory, por lo tanto, quería asegurarme de que está cargando el recurso adecuado. De todos modos, al dibujar en un lienzo podría ser útil tener acceso a otras resoluciones del mapa de bits, sin incluirlo varias veces en el APK. –
Eso es cierto, pero si quiere ser flojo, puede incluirlo una vez y dejar que el sistema operativo sepa que no hay otras copias. Probablemente pueda salirse con la suya únicamente con MDPI o HDPI; el arte lineal no se verá tan bien. – Sparky