getDrawingCache()返回null

时间:2012-12-10 11:18:14

标签: android bitmap

我正在开发一个简单的绘图应用程序并尝试实现在用户请求时提供更多空间来绘制的功能,我认为可以通过简单地滚动我的CustomView类(包含在LinearLayout中)来完成然后在ScrollView类中)。如果我没有通过运行Chunk 1来调整CustomView类的大小,那么Chunk 2工作正常(它只是保存了一个绘图画面。此时,没有滚动。)真糟糕!当块1运行时,块2失败(view.getDrawingCache()返回null)(此时,启用滚动)。我想保存整个视图,包括因滚动而遗漏的部分。

第1块:

CustomView view = (CustomView) findViewById(R.id.customViewId);
height = 2 * height;
view.setLayoutParams(new LinearLayout.LayoutParams(width, height));

第2块:

CustomView view = (CustomView) findViewById(R.id.customViewId);
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);

这两个代码块是两个不同方法中的独立和小部分。

已编辑:已解决

经过数十亿次Google查询后,问题现已解决;) 我提到了这个帖子,https://groups.google.com/forum/?fromgroups=#!topic/android-developers/VQM5WmxPilM 我不明白的是getDrawingCache()方法对View类的大小(宽度和高度)有限制。如果View类太大,getDrawingCache()只返回null 因此,解决方案不是使用该方法,而是如下所示。

CustomView view = (CustomView) findViewById(R.id.customViewId);
Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), 
  view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 
Canvas bitmapHolder = new Canvas(bitmap); 
view.draw(bitmapHolder);
// bitmap now contains the data we need! Do whatever with it!

1 个答案:

答案 0 :(得分:3)

在能够使用位图之前,您需要调用buildDrawingCache()

setDrawingCache(true)只是设置标志并等待下一个绘图传递,以便创建缓存位图。

另外,当您不再需要时,请不要忘记致电destroyDrawingCache()