所以,我已经看了一段时间的
ImageView源代码,但我还没有想出一个钩子来做到这一点.
问题是:在ScrollView中有30个400×800图像(图像数量是可变的).由于它们完全适合屏幕,因此每个将占用1.3 MB的RAM.
我想要的是:能够为ScrollView中当前可见的ImageView加载/卸载位图.如果用户滚动并且位图不再可见(在距离阈值内),则应该回收位图,以便内存可以被同一ScrollView中的其他位图使用.我正在进行下采样以及所有这些,所以不用担心.如果你只通过扩展ImageView来实现这一点(如果可能的话我想不要乱用ScrollView).
简介:我可以在ImageView变得可见之后加载图像(使用聪明的技巧),但我不知道何时卸载它们.
注意:由于其他可用性原因,我无法使用ListView执行此操作.
解决方法
如果要回收位图,请调用此方法.
public static void recycleImagesFromView(View view) { if(view instanceof ImageView) { Drawable drawable = ((ImageView)view).getDrawable(); if(drawable instanceof BitmapDrawable) { BitmapDrawable bitmapDrawable = (BitmapDrawable)drawable; bitmapDrawable.getBitmap().recycle(); } } if (view instanceof ViewGroup) { for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { recycleImagesFromView(((ViewGroup) view).getChildAt(i)); } } }