不推荐使用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'4

Answers:


200

改为这样做:

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

好的,谢谢,这似乎可行。我担心那里的贬值!它的确使图标变大了,但我会进一步研究它!
李·阿姆斯特朗

7
@LeeArmstrong看起来更大,因为它使用资源对象将图像调整为屏幕的密度。通常不赞成使用方法,这意味着它不再是正确的处理方法,而是经常保持实现以保持向后兼容。但是,Google似乎并不总是对API友好,因此如果将来他们打破了旧的构造函数,这也不会令我感到惊讶。
2012年

我必须在Tools类的静态方法中创建新的BitmapDrawable。我无权访问上下文。在这种情况下,如何使用此方法?
Marek 2013年

1
@Marek我认为您应该使用所有相关的源代码(包括如何调用该方法)来提出一个新问题。您可能只需要重构该方法即可将上下文(或资源)也传递给该方法。
它身上

2
这个新的构造函数缩放了位图,在许多情况下这不是所需的行为。
Moxor 2014年

2

尝试一次。

  1. 活动中

    BitmapDrawable background = new BitmapDrawable(this.getResources(), blurImageBg);
  2. 片段中

    BitmapDrawable background = new BitmapDrawable(getActivity(), blurImageBg);
  3. 在适配器或其他

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.