Alternativa obsoleta de BitmapDrawable

88

Eu tenho o seguinte código que irá girar um drawable por uma quantidade definida de graus.

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

O novo SDK diz que o

BitmapDrawable(canvasBitmap); 

está obsoleto. Alguma alternativa?

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

Lee Armstrong
fonte
1
O que há de errado com 'new BitmapDrawable (context.getResources (), canvasBitmap);'?
Reuben Scratton

Respostas:

201

Em vez disso:

return new BitmapDrawable(context.getResources(), canvasBitmap);
nele
fonte
OK, obrigado, isso parece funcionar. Eu estava preocupado com a depreciação lá! Parece que o ícone fica maior, mas vou analisar isso mais a fundo!
Lee Armstrong,
7
@LeeArmstrong Parece maior porque está usando o objeto de recurso para ajustar a imagem à densidade de sua tela. Freqüentemente, a depreciação de um método significa que ele não é mais a maneira certa de fazer as coisas, mas muitas vezes é mantido implementado para manter a compatibilidade com versões anteriores. No entanto, o Google nem sempre parece ser amigável à API, então não me surpreenderia se eles quebrassem o antigo construtor no futuro.
Onit
Eu tenho que criar um novo BitmapDrawable no método estático da classe Tools. Eu não tenho acesso ao contexto. Como posso usar esse método nesse caso?
Marek
1
@Marek, acho que você deve abrir uma nova questão com todo o código-fonte relevante, incluindo como você está chamando esse método. Você pode apenas precisar refatorar esse método para que o contexto (ou recursos) sejam passados ​​para ele também.
Onit
2
Esse novo construtor dimensiona o bitmap, o que em muitos casos não é o comportamento desejado.
Moxor de
2

Experimente uma vez.

  1. Em atividade

    BitmapDrawable background = new BitmapDrawable(this.getResources(), blurImageBg);
  2. Em Fragmento

    BitmapDrawable background = new BitmapDrawable(getActivity(), blurImageBg);
  3. No adaptador ou então

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

Código Kotlin para BitmapDrawable:

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