2012-05-24 68 views
6

我的应用程序有此代码段如何避免View.getDrawingCache()中的空指针?

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); 

回答

0

其实你的猜测是正确的。如果您正在使用硬件加速层,则无法使用绘图缓存。新设备默认情况下具有硬件加速功能,因此可能是您的问题。您可以关闭这样的单一视图的硬件加速。

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