BitmapDrawable alternatif yang tidak digunakan lagi

89

Saya memiliki kode berikut yang akan memutar drawable dengan sejumlah derajat.

    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 baru mengatakan bahwa

BitmapDrawable(canvasBitmap); 

sudah ditinggalkan. Ada alternatif lain?

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

Lee Armstrong
sumber
1
Apa yang salah dengan 'New BitmapDrawable (context.getResources (), canvasBitmap);'?
Ruben Scratton

Jawaban:

201

Lakukan ini sebagai gantinya:

return new BitmapDrawable(context.getResources(), canvasBitmap);
onit
sumber
OK terima kasih, sepertinya itu berhasil. Saya khawatir tentang penghentian di sana! Tampaknya membuat ikon lebih besar tetapi saya akan memeriksanya lebih jauh!
Lee Armstrong
7
@LeeArmstrong Tampilannya lebih besar karena menggunakan objek sumber daya untuk menyesuaikan gambar dengan kepadatan layar Anda. Seringkali mencela suatu metode berarti itu bukan lagi cara yang tepat untuk melakukan sesuatu, tetapi sering kali terus diterapkan untuk menjaga kompatibilitas ke belakang. Namun, Google tampaknya tidak selalu ramah API, jadi tidak akan mengejutkan saya jika mereka merusak konstruktor lama di masa mendatang.
onit
Saya harus membuat BitmapDrawable baru dalam metode statis kelas Tools. Saya tidak memiliki akses ke konteks. Bagaimana saya bisa menggunakan metode ini dalam kasus itu?
Marek
1
@ Marek Saya pikir Anda harus membuka pertanyaan baru dengan semua kode sumber yang relevan termasuk bagaimana Anda memanggil metode itu. Anda mungkin hanya perlu memfaktor ulang metode tersebut agar konteks (atau sumber daya) diteruskan ke dalamnya juga.
onit
2
Konstruktor baru ini menskalakan bitmap, yang dalam banyak kasus bukanlah perilaku yang diinginkan.
Moxor
2

Coba ini Sekali.

  1. Dalam Aktivitas

    BitmapDrawable background = new BitmapDrawable(this.getResources(), blurImageBg);
    
  2. Dalam Fragmen

    BitmapDrawable background = new BitmapDrawable(getActivity(), blurImageBg);
    
  3. Di Adaptor atau lainnya

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

Kode Kotlin untuk BitmapDrawable:

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