Poiché il livello API 15 di Android è lo methodpublic Drawable getDrawableForDensity (int id, int density)
per recuperare un oggetto drawable per una densità dello schermo specifica. C'è un modo per farlo prima dell'API Livello 15?Ottieni drawable per densità per Livello API <15
risposta
Quindi ho pensato che potesse essere risolto utilizzando il reverse engineering delle API di Android e il codice sorgente come da suggerimento di @ adtennant. Ho iniziato a scrivere la soluzione, ma nel processo ha colpito un vicolo cieco visto che l'API nativa (non Java) sottostante necessaria non è disponibile nelle versioni successive di Android.
Se stai bene vincolando questo solo a Bitmap, come implicito nel tuo commento, è possibile farlo con BitmapFactory come suggerito. BitmapFactory ha un altro metodo:
decodeResource(Resources res, int id, BitmapFactory.Options opts)
Questo metodo accetta l'ulteriore BitmapFactory.Options che vi permetterà di specificare la densità per caricare. Questo sembra essere in vigore dal livello di API 1. In particolare, credo che è possibile utilizzare:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inDensity = DisplayMetrics.DENSITY_MEDIUM; // whichever you want to load
options.inTargetDensity = getResources().getDisplayMetrics().densityDpi;
options.inScaled = true;
Questo sarà anche ridimensionarlo alla densità schermo se una densità non corrispondenti viene caricato.
- 1. <animato-vector> richiede il livello API 21 (min corrente 15)
- 2. annotazione livello API Android per librerie Android
- 3. SQL Ottieni la prima occorrenza del 15 per una data
- 4. Sviluppo Android: api 14 vs api 15
- 5. Come rimuovere alcuni drawable densità da biblioteca Android
- 6. Android getChildFragmentManager() API di livello <17
- 7. Problema di compatibilità ActionBar con API 15
- 8. android decodeResource restituisce null per bitmap xml - Livello API 7
- 9. API audio di basso livello per Android
- 10. Come layout-sw600dp, alternativa per il drawable
- 11. metodo alternativo per TextView.getMaxLines() per Android 4.0.3 (API 15) e al di sotto
- 12. rotante ImageView in Android <API livello 11
- 13. impostazione di densità personalizzata per un emulatore
- 14. Routine di quadratura per densità di probabilità
- 15. Aggiungere linee di densità per istogramma e istogramma cumulativo
- 16. API grafico Facebook: ottieni l'ID per un URL?
- 17. Ottieni il nome di dominio per pinterest api
- 18. Ottieni ArrayList <NameValuePair> valore per nome
- 19. Ottieni il risultato per l'ultima attività <> (continuazione)?
- 20. Migliore API per audio di basso livello in Windows?
- 21. L'annotazione @TargetApi è solo per un livello Api o superiore?
- 22. Ottieni solo media utente (foto) - API Twitter
- 23. TextView diversi modi per aggiungere drawable
- 24. quale stile/attr/drawable per sfondo inverso?
- 25. API Java per MongoDB
- 26. Android xml drawable Impossibile convertire ad eccezione del colore per API 10
- 27. Come mettere drawable come sfondo su InfoWindow (API di Google Maps v2 per Android)?
- 28. xkb: modo corretto per interagire con Mint 15/Ubuntu 13
- 29. No, minSdk (API 15)> deviceSdk (API1) in Android Studio
- 30. API Reflection per Scala
Non cercare di essere denso, ma perché non puoi semplicemente recuperare il Drawable con il suo nome (ID risorsa) e lasciare che il sistema operativo sia quello giusto? – Sparky
Questo funziona perfettamente per i miei layout XML, ma quando carico la bitmap tramite BitmapFactory.decodeResource (risorse res, int id) mostra la bitmap con una risoluzione più piccola. Forse questo ha a che fare con un ridimensionamento di BitmapFactory, quindi volevo assicurarmi che stia caricando la risorsa giusta. Ad ogni modo, disegnando su una tela potrebbe essere utile avere accesso ad altre risoluzioni della bitmap, senza includerla più volte nell'APK. –
Questo è vero, ma se vuoi essere pigro, puoi semplicemente includerlo una volta e lasciare che il sistema operativo capisca che non ci sono altre copie. Probabilmente puoi farla franca solo con MDPI o HDPI per una foto; la line art non sarà così bella. – Sparky