如何避免View.getDrawingCache()中的空指针?

时间:2012-05-24 04:31:55

标签: android android-view

我的应用有此代码段

mView.setDrawingCacheEnabled(true);
mBitmap = Bitmap.createBitmap(mView.getDrawingCache());

其中mView是FrameLayout的自定义子类的实例。该应用程序已成功运行了6个月,拥有数千名用户。最近我收到了一些关于传递给createBitmap()的空指针的报告(可能来自同一个用户但我无法确认)。我不知道用户使用的硬件或Android版本。

即使我在之前启用了缓存,导致getDrawingCache()返回null的原因是什么?它与新手机的硬件加速有关吗?是因为位图的ram不足吗?还要别的吗?可以预防吗?

编辑:我在这里找到了这个解决方案http://tinyurl.com/7yranvj。这是一个合理的解决方法吗?

mBitmap = Bitmap.createBitmap(mView.getWidth(), mView.getHeight(),
        Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(mBitMap);
mView.draw(canvas);

1 个答案:

答案 0 :(得分:0)

实际上你的猜测是正确的。如果您使用的是硬件加速图层,则无法使用图形缓存。新设备默认启用硬件加速,因此可能是您的问题。您可以关闭单个视图的硬件加速。

if(android.os.Build.VERSION.SDK_INT >= 11) frame.setLayerType(LAYER_TYPE_SOFTWARE, null);
frame.setDrawingCacheEnabled(true);