getDrawingCache()返回null

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

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

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

编辑:解决

经过数十亿次谷歌查询后,问题现已解决;)
我参考了此主题,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!

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

setDrawingCache(true)事物只是设置标志并等待下一个绘制过程以创建高速缓存位图。

当你不再需要它时,也不要忘记调用destroyDrawingCache()

链接地址: http://www.djcxy.com/p/11579.html

上一篇: getDrawingCache() returns null

下一篇: Setting up SLIME on MacOSX