ทางเลือกที่เลิกใช้ BitmapDrawable


89

ฉันมีรหัสต่อไปนี้ที่จะหมุนวาดได้ตามจำนวนองศาที่กำหนด

    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
มีอะไรผิดปกติกับ 'BitmapDrawable ใหม่ (context.getResources (), canvasBitmap);'?
Reuben Scratton

คำตอบ:


201

ทำสิ่งนี้แทน:

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

ตกลงขอบคุณดูเหมือนจะได้ผล ฉันกังวลเกี่ยวกับการเลิกใช้งานที่นั่น! ดูเหมือนว่าจะทำให้ไอคอนใหญ่ขึ้น แต่ฉันจะตรวจสอบต่อไป!
Lee Armstrong

7
@LeeArmstrong มันดูใหญ่ขึ้นเพราะใช้วัตถุทรัพยากรเพื่อปรับภาพตามความหนาแน่นของหน้าจอ บ่อยครั้งที่การเลิกใช้วิธีการนี้หมายความว่าวิธีนี้ไม่ใช่วิธีที่ถูกต้องอีกต่อไป แต่มักจะถูกนำมาใช้เพื่อรักษาความเข้ากันได้แบบย้อนกลับ อย่างไรก็ตาม Google ดูเหมือนจะไม่เป็นมิตรกับ API เสมอไปดังนั้นจึงไม่แปลกใจเลยหากพวกเขาทำลายตัวสร้างเก่าในอนาคต
Onit

ฉันต้องสร้าง BitmapDrawable ใหม่ในวิธีการคงที่ของคลาส Tools ฉันไม่มีสิทธิ์เข้าถึงบริบท ฉันจะใช้วิธีนี้ในกรณีนั้นได้อย่างไร?
Marek

1
@Marek ฉันคิดว่าคุณควรเปิดคำถามใหม่พร้อมซอร์สโค้ดที่เกี่ยวข้องทั้งหมดรวมถึงวิธีที่คุณเรียกใช้วิธีนั้น คุณอาจต้องเปลี่ยนวิธีการนั้นใหม่เพื่อให้บริบท (หรือทรัพยากร) ส่งผ่านเข้าไปด้วยเช่นกัน
onit

2
ตัวสร้างใหม่นี้จะปรับขนาดบิตแมปซึ่งในหลาย ๆ กรณีไม่ใช่พฤติกรรมที่ต้องการ
Moxor

2

ลองครั้งนี้

  1. ในกิจกรรม

    BitmapDrawable background = new BitmapDrawable(this.getResources(), blurImageBg);
    
  2. ใน Fragment

    BitmapDrawable background = new BitmapDrawable(getActivity(), blurImageBg);
    
  3. ในอะแดปเตอร์หรืออื่น ๆ

    BitmapDrawable background = new BitmapDrawable(context.getResources(), blurImageBg);
    

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.