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);'?
Рубен Скраттон,

Відповіді:


201

Зробіть замість цього:

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

Добре, дякую, це, здається, працює. Мене хвилювало зневажання там! Здається, це робить піктограму більшою, але я розгляну це далі!
Лі Армстронг,

7
@LeeArmstrong Це виглядає більшим, оскільки він використовує об’єкт ресурсу для налаштування зображення відповідно до щільності екрану. Часто відмова від методу означає, що це просто не правильний спосіб робити щось, але його часто впроваджують, щоб зберегти зворотну сумісність. Однак, здається, Google не завжди зручний для API, тому мене не здивує, якщо вони зламають старий конструктор у майбутньому.
Onit

Мені потрібно створити новий BitmapDrawable у статичному методі класу Інструменти. Я не маю доступу до контексту. Як я міг використати цей метод у такому випадку?
Marek

1
@Marek Я думаю, вам слід відкрити нове запитання з усім відповідним вихідним кодом, включаючи те, як ви викликаєте цей метод. Можливо, вам знадобиться просто переформатувати цей метод, щоб в нього також передався контекст (або ресурси).
on

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.