Perché il costruttore ne ha bisogno?
Dalla documentazione di BitmapDrawable(Resources res, Bitmap bitmap)
:
Creare drawable da una bitmap, impostare la densità target iniziale in base alle metriche di visualizzazione delle risorse.
Quindi, ciò che è necessario al fine di impostare una densità obiettivo iniziale utilizzando le metriche di visualizzazione, e la DisplayMetrics
sarebbe prelevato dalla Resources
che si sta fornendo come parametro per BitmapDrawable
.
Come possiamo definire tale valore se si utilizza una cache di immagini generale?
Siamo spiacenti, non è possibile capire la domanda. Puoi riformulare?
Se ho già scalato il Bitmap me stesso, perché non BitmapDrawable bisogno di risorse?
Come può BitmapDrawable
sapere, che avete già scalato il Bitmap
? Normalmente, se stai creando un BitmapDrawable
, non dovresti occuparti di ridimensionarlo da solo, ecco perché l'API è progettata in questo modo.
Sembra che l'unico modo per evitare il ridimensionamento quando si converte un Bitmap ad un Drawable è quello di utilizzare il costruttore deprecato?
Sebbene suoni male, ma puoi vedere come le classi del framework di transizione usano quel costruttore, ad es. ChangeBounds
, Crossfade
.
ho scavato fonti un po 'e ho trovato questo pezzo di codice in Bitmap
classe:
static public int scaleFromDensity(int size, int sdensity, int tdensity) {
if (sdensity == DENSITY_NONE || tdensity == DENSITY_NONE || sdensity == tdensity) {
return size;
}
// Scale by tdensity/sdensity, rounding up.
return ((size * tdensity) + (sdensity >> 1))/sdensity;
}
Questo viene chiamato in seguito a catena:
* BitmapDrawable#constructor
* BitmapDrawable#updateLocalState()
* BitmapDrawable#computeBitmapSize()
* Bitmap#getScaledWidth()
* scaleFromDensity(getWidth(), mDensity, targetDensity)
Che cosa succede se si imposta in modo esplicito la densità del tuo Bitmap
a DENSITY_NONE
? Quindi il controllo if
verrà valutato su true
e non verrà eseguito alcun ridimensionamento.
Bitmap bitmap = ...
bitmap.setDensity(Bitmap.DENSITY_NONE);
Non hanno testato, solo facendo ipotesi basate su fonti.
per quanto ho capito dall'API: "Vedi anche la classe Bitmap, che gestisce la gestione e la trasformazione della grafica bitmap grezza, e dovrebbe essere usata quando si disegna su un Canvas.", Dovresti usare Bitmap invece di BitmapDrawable se Hai un'immagine non definita in Risorse. – Opiatefuchs
Sembra che anche "setImageBitmap" usi internamente "BitmapDrawable". ('ImageView.class') – frankish