use*_*880 6 android android-view
我的应用有此代码段
mView.setDrawingCacheEnabled(true);
mBitmap = Bitmap.createBitmap(mView.getDrawingCache());
Run Code Online (Sandbox Code Playgroud)
其中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);
Run Code Online (Sandbox Code Playgroud)
其实你的猜测是对的。如果使用硬件加速层,则不能使用绘图缓存。新设备默认启用硬件加速,因此这可能是您的问题。您可以像这样关闭单个视图的硬件加速。
if(android.os.Build.VERSION.SDK_INT >= 11) frame.setLayerType(LAYER_TYPE_SOFTWARE, null);
frame.setDrawingCacheEnabled(true);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1389 次 |
最近记录: |