BitmapDrawable thay thế không được dùng nữa


88

Tôi có đoạn mã sau sẽ xoay một bảng có thể vẽ theo một lượng độ đã đặt.

    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 mới nói rằng

BitmapDrawable(canvasBitmap); 

không được dùng nữa. Có bất kỳ lựa chọn thay thế nào không?

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


1
Có gì sai với 'BitmapDrawable mới (context.getResources (), canvasBitmap);'?
Reuben Scratton

Câu trả lời:


201

Làm điều này thay thế:

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

OK, cảm ơn, điều đó có vẻ hiệu quả. Tôi đã lo lắng về sự phản đối ở đó! Nó dường như làm cho biểu tượng lớn hơn nhưng tôi sẽ xem xét thêm!
Lee Armstrong

7
@LeeArmstrong Nó trông lớn hơn vì nó đang sử dụng đối tượng tài nguyên để điều chỉnh hình ảnh theo mật độ màn hình của bạn. Thường không chấp nhận một phương pháp có nghĩa là nó không còn là cách đúng đắn để thực hiện mọi việc, mà nó thường được triển khai để giữ khả năng tương thích ngược. Tuy nhiên, Google dường như không phải lúc nào cũng thân thiện với API, vì vậy tôi sẽ không ngạc nhiên nếu họ phá vỡ hàm tạo cũ trong tương lai.
onit

Tôi phải tạo BitmapDrawable mới trong phương thức tĩnh của lớp Công cụ. Tôi không có quyền truy cập vào ngữ cảnh. Làm thế nào tôi có thể sử dụng phương pháp này trong trường hợp đó?
Marek

1
@Marek Tôi nghĩ bạn nên mở một câu hỏi mới với tất cả mã nguồn có liên quan bao gồm cách bạn đang gọi phương thức đó. Bạn có thể chỉ cần cấu trúc lại phương thức đó để chuyển ngữ cảnh (hoặc tài nguyên) vào nó.
onit

2
Hàm tạo mới này chia tỷ lệ bitmap, trong nhiều trường hợp không phải là hành vi mong muốn.
Moxor

2

Hãy thử điều này một lần.

  1. Đang hoạt động

    BitmapDrawable background = new BitmapDrawable(this.getResources(), blurImageBg);
    
  2. Trong mảnh

    BitmapDrawable background = new BitmapDrawable(getActivity(), blurImageBg);
    
  3. Trong Bộ điều hợp hoặc khác

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.