【问题标题】:getDrawingCache() returns nullgetDrawingCache() 返回 null
【发布时间】:2017-03-13 15:37:53
【问题描述】:

我正在开发一个简单的绘画应用程序,并尝试实现在用户请求时提供更多绘画空间的功能,我认为这可以通过简单地启用我的 CustomView 类(包含在 LinearLayout然后在 ScrollView 类中)。如果我没有通过运行 Chunk 1 调整 CustomView 类的大小,Chunk 2 可以正常工作(它只是保存一屏绘图。此时,没有滚动。)真可惜! Chunk 1 运行时 Chunk 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!

【问题讨论】:

  • 您是否试图在没有任何用户交互的情况下立即在 onCreate 中获取位图?

标签: android bitmap


【解决方案1】:

您需要致电buildDrawingCache(),才能使用位图。

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

当您不再需要它时,不要忘记致电destroyDrawingCache()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多