Устаревшая альтернатива BitmapDrawable

88

У меня есть следующий код, который будет вращать рисование на заданное количество градусов.

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

В новом SDK говорится, что

BitmapDrawable(canvasBitmap); 

не рекомендуется. Есть вообще какие-нибудь альтернативы?

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

Ли Армстронг
источник
1
Что не так с 'new BitmapDrawable (context.getResources (), canvasBitmap);'?
Reuben Scratton 02

Ответы:

201

Вместо этого сделайте это:

return new BitmapDrawable(context.getResources(), canvasBitmap);
в теме
источник
Хорошо, спасибо, похоже, это работает. Переживал по поводу устаревания там! Похоже, что значок действительно стал больше, но я рассмотрю это дальше!
Ли Армстронг
7
@LeeArmstrong. Он выглядит больше, потому что использует объект ресурса для настройки изображения в соответствии с плотностью экрана. Часто отказ от метода означает, что он больше не является правильным способом делать что-либо, но его часто продолжают реализовывать, чтобы сохранить обратную совместимость. Однако Google не всегда кажется дружественным к API, поэтому меня не удивит, если в будущем они сломают старый конструктор.
2012
Мне нужно создать новый BitmapDrawable в статическом методе класса Tools. У меня нет доступа к контексту. Как я мог использовать этот метод в таком случае?
Marek
1
@Marek Я думаю, вам следует открыть новый вопрос со всем соответствующим исходным кодом, включая то, как вы вызываете этот метод. Возможно, вам просто потребуется реорганизовать этот метод, чтобы в него также передавался контекст (или ресурсы).
Onit
2
Этот новый конструктор масштабирует растровое изображение, что во многих случаях является нежелательным поведением.
Moxor
2

Попробуйте это один раз.

  1. В действии

    BitmapDrawable background = new BitmapDrawable(this.getResources(), blurImageBg);
    
  2. Во фрагменте

    BitmapDrawable background = new BitmapDrawable(getActivity(), blurImageBg);
    
  3. В адаптере или еще

    BitmapDrawable background = new BitmapDrawable(context.getResources(), blurImageBg);
    
Сурендар D
источник
1

Код Kotlin для BitmapDrawable:

var bitmapDrawable = BitmapDrawable(resources,bitmapObj)
Хамед Джалилиани
источник