我有一个自定义 View ,它绘制了一堆东西,包括位图。我想把这张图缓存到位图上,这样我只需要在onDraw中绘制一张位图,而不是重复这些绘图任务和计算。
位图在我们不再使用后需要回收。我在 View 类中看不到 onDestroy() 或任何类似的东西。是否有我可以覆盖的回调方法来实现此目的?
public void <insert_callback_here>() {
cachedBitmap.recycle();
}
没有动画。这是静态图像。绘制图像需要进行大量计算,因此我宁愿在 onMeasure() 上执行一次。
最佳答案
我要在这里回答我自己的问题。要覆盖的正确方法是 onDetachedFromWindow
。我在 onDetachedFromWindow
中取消分配我的位图,如果宽度或高度发生变化,则在 onMeasure
中重新分配它们。
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (cachedBitmap != null && !cachedBitmap.isRecycled()) {
cachedBitmap.recycle();
cachedBitmap = null;
cachedBitmapWidth = -1;
cachedBitmapHeight = -1;
}
}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int viewWidth = MeasureSpec.getSize(widthMeasureSpec);;
int viewHeight = MeasureSpec.getSize(heightMeasureSpec);;
if (cachedBitmapWidth != viewWidth || cachedBitmapHeight != viewHeight) {
if (cachedBitmap != null) {
cachedBitmap.recycle();
}
cachedBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
cachedBitmapWidth = viewWidth;
cachedBitmapHeight = viewHeight;
Canvas canvas = new Canvas(cachedBitmap);
// do drawings here..
}
setMeasuredDimension(viewWidth, viewHeight);
}
关于android - 在 Android View 上哪里可以正确释放位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11784171/