我有一个与绘图缓存一起使用的自裁剪图像视图。我正在使用 ViewTreeObserver 查看布局何时准备就绪,然后在视图中获取裁剪后的图像并使用裁剪后的版本更新 ImageView 的位图。绘图缓存每次都为空。我可以将 ImageView 的可绘制位图设置为 getDrawingCache() ,这很好,但在内存上很糟糕。我正在尝试拍摄该快照并为 GC 发布其他所有内容。我在这里想念什么?
public CroppingImageView(Context context){
super(context);
ViewTreeObserver vto = getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
getViewTreeObserver().removeOnGlobalLayoutListener(this);
crop();
}
});
}
public void crop(){
setDrawingCacheEnabled(true);
buildDrawingCache();
Bitmap cached = getDrawingCache();
Log.i("ImageView", "drawing cache " + getDrawingCache());
Bitmap croppedBitmap = Bitmap.createBitmap(cached);
destroyDrawingCache();
cached.recycle();
cached = null;
setDrawingCacheEnabled(false);
setImageBitmap(croppedBitmap);
}