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

块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!

最佳答案

您需要先调用buildDrawingCache(),然后才能使用位图。
setDrawingCache(true)东西只是设置标志并等待下一个绘制过程才能创建缓存位图。

另外,当您不再需要destroyDrawingCache()时,请不要忘记调用它。

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

10-12 03:38