2012-05-02 11 views
10

Il seguente codice definisce il mio bitmap:Disegnare una bitmap ridimensionata sull'area di disegno?

Resources res = context.getResources(); 

    mBackground = BitmapFactory.decodeResource(res, 
      R.drawable.bg2); 

    //scale bitmap 
    int h = 800; // height in pixels 
    int w = 480; // width in pixels  
    Bitmap scaled = Bitmap.createScaledBitmap(mBackground, w, h, true); // Make sure w and h are in the correct order 

... E il seguente codice viene utilizzato per eseguire/disegnarlo (la bitmap non in scala):

c.drawBitmap(mBackground, 0, 0, null); 

La mia domanda è: come potrei impostarlo per disegnare la bitmap ridimensionata restituita sotto forma di "Bitmap ridimensionato" e non l'originale?

risposta

25

Definire una nuova variabile membro della classe: Bitmap mScaledBackground; Quindi, assegnare il bitmap in scala appena creato ad esso: mScaledBackground = scaled; Poi, chiamare il metodo draw: c.drawBitmap(mScaledBackground, 0, 0, null);

Nota che non è una buona idea per modificare le dimensioni dello schermo nel modo in cui hai eseguito lo snippet in alto. Meglio sarebbe per andare a prendere le dimensioni dello schermo del dispositivo nel modo seguente:

int width = getWindowManager().getDefaultDisplay().getWidth(); 
int height = getWindowManager().getDefaultDisplay().getHeight(); 

E sarebbe probabilmente meglio non dichiarare una nuova bitmap per l'unico scopo di disegnare il tuo sfondo originale in un modo in scala. Le bitmap consumano molte risorse preziose e, in genere, un telefono è limitato a pochi Mb di bitmap che è possibile caricare prima che la tua app fallisca in modo disgraziato. Invece si potrebbe fare qualcosa di simile:

Rect src = new Rect(0,0,bitmap.getWidth()-1, bitmap.getHeight()-1); 
Rect dest = new Rect(0,0,width-1, height-1); 
c.drawBitmap(mBackground, src, dest, null); 
+1

la tua risposta ha funzionato per me, ma sottrarre 1 da larghezza e altezza in argomenti stava visualizzando una linea (da un'altra bitmap sullo sfondo) a destra e in basso della bitmap visualizzata, rimuovendo -1 funzionava bene. – akshay7692

+1

So che questo è un post più vecchio ora. Ma per Android 7.0+, potresti non essere in grado di fare affidamento sull'intera larghezza/altezza del display quando sei in modalità schermo diviso. Quindi, per chiunque usi questa soluzione, dovresti tenerlo a mente. – MCLLC

+0

in questo modo disegnerebbe bitmap molto lentamente? – Amos

2

per disegnare la bitmap in scala che si desidera salvare il bitmap in scala in un campo da qualche parte (qui chiamato mScaled) e chiamare:

c.drawBitmap(mScaled,0,0,null); 

nel metodo draw (o ovunque lo chiami adesso).

Problemi correlati