Alternativa deprecata BitmapDrawable


89

Ho il seguente codice che ruoterà un disegnabile di un determinato numero di gradi.

    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 dice che il

BitmapDrawable(canvasBitmap); 

è deprecato. Qualche alternativa?

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


1
Cosa c'è di sbagliato in 'new BitmapDrawable (context.getResources (), canvasBitmap);'?
Reuben Scratton

Risposte:


201

Fai questo invece:

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

OK grazie, sembra funzionare. Ero preoccupato per la deprecazione lì! Sembra rendere l'icona più grande, ma lo esaminerò ulteriormente!
Lee Armstrong

7
@LeeArmstrong Sembra più grande perché utilizza l'oggetto risorsa per adattare l'immagine alla densità dello schermo. Spesso deprecare un metodo significa che non è più il modo giusto di fare le cose, ma viene spesso mantenuto implementato per mantenere la compatibilità con le versioni precedenti. Tuttavia, Google non sembra sempre essere API friendly, quindi non mi sorprenderebbe se in futuro rompessero il vecchio costruttore.
Onit

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

1
@Marek Penso che dovresti aprire una nuova domanda con tutto il codice sorgente pertinente, incluso il modo in cui stai chiamando quel metodo. Potrebbe essere necessario eseguire il refactoring di quel metodo per farvi passare anche il contesto (o le risorse).
Onit

2
Questo nuovo costruttore ridimensiona la bitmap, che in molti casi non è il comportamento desiderato.
Moxor

2

Prova questa volta.

  1. In attività

    BitmapDrawable background = new BitmapDrawable(this.getResources(), blurImageBg);
    
  2. In Fragment

    BitmapDrawable background = new BitmapDrawable(getActivity(), blurImageBg);
    
  3. In Adapter o altro

    BitmapDrawable background = new BitmapDrawable(context.getResources(), blurImageBg);
    

1

Codice Kotlin per BitmapDrawable:

var bitmapDrawable = BitmapDrawable(resources,bitmapObj)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.