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


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

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

1

Código Kotlin para BitmapDrawable:

var bitmapDrawable = BitmapDrawable(resources,bitmapObj)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.