Alternative obsolète à BitmapDrawable

88

J'ai le code suivant qui fera pivoter un dessinable d'une quantité définie de degrés.

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

Le nouveau SDK indique que le

BitmapDrawable(canvasBitmap); 

est obsolète. Des alternatives du tout?

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

Lee Armstrong
la source
1
Quel est le problème avec 'new BitmapDrawable (context.getResources (), canvasBitmap);'?
Reuben Scratton

Réponses:

201

Faites ceci à la place:

return new BitmapDrawable(context.getResources(), canvasBitmap);
dessus
la source
OK merci, cela semble fonctionner. J'étais inquiet de la dépréciation là-bas! Cela semble agrandir l'icône, mais j'examinerai cela plus loin!
Lee Armstrong
7
@LeeArmstrong Il semble plus grand car il utilise l'objet de ressource pour ajuster l'image à la densité de votre écran. Souvent, déprécier une méthode signifie que ce n'est plus la bonne façon de faire les choses, mais qu'elle est souvent mise en œuvre pour maintenir la compatibilité ascendante. Cependant, Google ne semble pas toujours être compatible avec les API, donc cela ne me surprendrait pas s'ils cassaient l'ancien constructeur à l'avenir.
onit le
Je dois créer un nouveau BitmapDrawable dans la méthode statique de la classe Tools. Je n'ai pas accès au contexte. Comment pourrais-je utiliser cette méthode dans ce cas?
Marek
1
@Marek Je pense que vous devriez ouvrir une nouvelle question avec tout le code source pertinent, y compris comment vous appelez cette méthode. Vous devrez peut-être simplement refactoriser cette méthode pour que le contexte (ou les ressources) y soient également transmis.
onit le
2
Ce nouveau constructeur met à l'échelle le bitmap, ce qui dans de nombreux cas n'est pas le comportement souhaité.
Moxor
2

Essayez ceci une fois.

  1. En activité

    BitmapDrawable background = new BitmapDrawable(this.getResources(), blurImageBg);
  2. En fragment

    BitmapDrawable background = new BitmapDrawable(getActivity(), blurImageBg);
  3. Dans l'adaptateur ou autre

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

Code Kotlin pour BitmapDrawable:

var bitmapDrawable = BitmapDrawable(resources,bitmapObj)
Hamed Jaliliani
la source