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


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

Antworten:


200

Tun Sie dies stattdessen:

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

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

1

Kotlin-Code für BitmapDrawable:

var bitmapDrawable = BitmapDrawable(resources,bitmapObj)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.