android开发对某个view的显示进行截图保存操作:
Bitmap bitmap = tv_capture.getDrawingCache();
单纯调用getDrawingCache()方法,发现返回图片为null
private Handler mHandler = new Handler();
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_capture:
tv_capture.destroyDrawingCache();
tv_capture.setDrawingCacheEnabled(true);
Bitmap bitmap = tv_capture.getDrawingCache();
iv_capture.setImageBitmap(bitmap);
mHandler.postDelayed(mResetCache, 200);
break;
}
}
private Runnable mResetCache = new Runnable() {
@Override
public void run() {
// 关闭文本视图tv_capture的绘图缓存
tv_capture.setDrawingCacheEnabled(false);
// 开启文本视图tv_capture的绘图缓存
tv_capture.setDrawingCacheEnabled(true);
}
};
截图前增加两行代码,可以正常获取到图片:
tv_capture.destroyDrawingCache();
tv_capture.setDrawingCacheEnabled(true);
Bitmap bitmap = tv_capture.getDrawingCache();
截图后延迟两秒调用任务处理来关闭缓存:
mHandler.postDelayed(mResetCache, 200);
如果立即关闭缓存,渲染画面就会找不到位图对象,会报错:
“java.lang.IllegalArgumentException: Cannot draw recycled bitmaps”。
所以要等界面渲染完成后再关闭绘图缓存,下面的做法是延迟200毫秒再关闭