BitmapDrawable veraltete Alternative

88

Ich habe den folgenden Code, der eine Zeichnung um einen festgelegten Grad dreht.

    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); 
    }

Das neue SDK sagt, dass die

BitmapDrawable(canvasBitmap); 

ist veraltet. Irgendwelche Alternativen überhaupt?

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

Lee Armstrong
quelle
1
Was ist falsch an 'new BitmapDrawable (context.getResources (), canvasBitmap);'?
Reuben Scratton

Antworten:

200

Tun Sie dies stattdessen:

return new BitmapDrawable(context.getResources(), canvasBitmap);
onit
quelle
OK danke, das scheint zu funktionieren. Ich war besorgt über die Abwertung dort! Es scheint das Symbol größer zu machen, aber ich werde das weiter untersuchen!
Lee Armstrong
7
@LeeArmstrong Es sieht größer aus, weil es das Ressourcenobjekt verwendet, um das Bild an die Dichte Ihres Bildschirms anzupassen. Wenn eine Methode häufig abgelehnt wird, ist dies nicht mehr die richtige Vorgehensweise, sondern wird häufig implementiert, um die Abwärtskompatibilität zu gewährleisten. Google scheint jedoch nicht immer API-freundlich zu sein, daher würde es mich nicht überraschen, wenn sie in Zukunft den alten Konstruktor kaputt machen würden.
am
Ich muss neues BitmapDrawable in der statischen Methode der Tools-Klasse erstellen. Ich habe keinen Zugang zum Kontext. Wie könnte ich diese Methode in diesem Fall verwenden?
Marek
1
@Marek Ich denke, Sie sollten eine neue Frage mit dem gesamten relevanten Quellcode eröffnen, einschließlich der Art und Weise, wie Sie diese Methode aufrufen. Möglicherweise müssen Sie diese Methode nur umgestalten, damit auch der Kontext (oder die Ressourcen) an sie übergeben werden.
am
2
Dieser neue Konstruktor skaliert die Bitmap, was in vielen Fällen nicht das gewünschte Verhalten ist.
Moxor
2

Versuchen Sie dies einmal.

  1. In Aktivität

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

    BitmapDrawable background = new BitmapDrawable(getActivity(), blurImageBg);
  3. Im Adapter oder sonst

    BitmapDrawable background = new BitmapDrawable(context.getResources(), blurImageBg);
Surendar D.
quelle
1

Kotlin-Code für BitmapDrawable:

var bitmapDrawable = BitmapDrawable(resources,bitmapObj)
Hamed Jaliliani
quelle