2012-04-02 22 views
66

Ho il seguente codice che ruoterà un drawable di un valore impostato di gradi.BitmapDrawable deprecated alternative

public Drawable rotateDrawable(float angle, Context context) 
    { 
     Bitmap arrowBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.generic2rb); 

     // Create blank bitmap of equal size 
     Bitmap canvasBitmap = arrowBitmap.copy(Bitmap.Config.ARGB_8888, true); 
     canvasBitmap.eraseColor(0x00000000); 

     // Create canvas 
     Canvas canvas = new Canvas(canvasBitmap); 

     // Create rotation matrix 
     Matrix rotateMatrix = new Matrix(); 
     rotateMatrix.setRotate(angle, canvas.getWidth()/2, canvas.getHeight()/2); 

     //Draw bitmap onto canvas using matrix 
     canvas.drawBitmap(arrowBitmap, rotateMatrix, null); 

     return new BitmapDrawable(canvasBitmap); 
    } 

Il nuovo SDK afferma che il

BitmapDrawable(canvasBitmap); 

è deprecato. Qualche alternativa?

http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html

+1

Cosa c'è di sbagliato con la 'nuova BitmapDrawable (context.getResources(), canvasBitmap);'? –

risposta

151

fare questo, invece:

return new BitmapDrawable(context.getResources(), canvasBitmap); 
+0

OK grazie, sembra funzionare. Ero preoccupato per la deprecazione lì! Sembra che l'icona sia più grande, ma cercherò di approfondirlo ulteriormente! –

+7

@LeeArmstrong Sembra più grande perché sta usando l'oggetto risorsa per regolare l'immagine alla densità dello schermo. Spesso deprecare un metodo significa che non è più il modo giusto di fare le cose, ma è spesso mantenuto implementato per mantenere la retrocompatibilità. Tuttavia, Google non sempre sembra essere API friendly, quindi non mi sorprenderebbe se in futuro avessero rotto il vecchio costruttore. – onit

+0

Devo creare un nuovo BitmapDrawable nel metodo statico della classe Tools. Non ho accesso al contesto. Come potrei usare questo metodo in quel caso? – Marek