BitmapDrawable alternativa obsoleta


88

Tengo el siguiente código que rotará un dibujable por una cantidad determinada de grados.

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

El nuevo SDK dice que el

BitmapDrawable(canvasBitmap); 

es obsoleto. ¿Alguna alternativa en absoluto?

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


1
¿Qué pasa con 'new BitmapDrawable (context.getResources (), canvasBitmap);'?
Reuben Scratton

Respuestas:


201

Haz esto en su lugar:

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

OK gracias, eso parece funcionar. ¡Estaba preocupado por la desaprobación allí! Parece agrandar el ícono, ¡pero lo investigaré más a fondo!
Lee Armstrong

7
@LeeArmstrong Parece más grande porque está usando el objeto de recurso para ajustar la imagen a la densidad de su pantalla. A menudo, desaprobar un método significa que ya no es la forma correcta de hacer las cosas, pero a menudo se mantiene implementado para mantener la compatibilidad con versiones anteriores. Sin embargo, Google no siempre parece ser compatible con API, por lo que no me sorprendería si rompieran el antiguo constructor en el futuro.
2012

Tengo que crear un nuevo BitmapDrawable en el método estático de la clase Tools. No tengo acceso al contexto. ¿Cómo podría usar este método en ese caso?
Marek

1
@Marek Creo que debería abrir una nueva pregunta con todo el código fuente relevante, incluida la forma en que llama a ese método. Es posible que solo necesite refactorizar ese método para que también se le pase el contexto (o los recursos).
2013

2
Este nuevo constructor escala el mapa de bits, que en muchos casos no es el comportamiento deseado.
Moxor

2

Pruebe esto una vez.

  1. En actividad

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

    BitmapDrawable background = new BitmapDrawable(getActivity(), blurImageBg);
    
  3. En adaptador o de lo contrario

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

1

Código Kotlin para BitmapDrawable:

var bitmapDrawable = BitmapDrawable(resources,bitmapObj)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.