android - getDrawingCache() 返回 null

标签 android bitmap

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

block 1:

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

第 2 block :

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!

最佳答案

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

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

另外不要忘记在不再需要时调用 destroyDrawingCache()

关于android - getDrawingCache() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13799917/

相关文章:

java - 根据 android studio 中的位置动态调整线性布局大小

android - 在裸机 react native 项目中安装 expo 后,我收到此错误

iphone - CGContextDrawImage 跨设备的字节值不一致?

android - 如何在内容滚动时捕获 ScrollView 的一部分?

delphi - 如何将位图转换为视频?

android 改变拍照尺寸

android - 有什么方法可以找出是什么阻止了我的应用程序的互联网访问?

android - 相同的包名不同的签名

java - Android App - 如何将 Canvas 上的位图绘图保存为图像?检查代码?

android - 如何从字符串中设置 imageView 的图像?