在我的应用程序中,我有一个带有许多图像的GridView(~100),布局类似于这个:
我在HTC Desire HD上测试我的应用程序。当我在gridview中有88个图像时,滚动是平滑的。现在,如果我添加10个图像,那么我总共有98个,没有任何接近平滑滚动的东西 - 它现在“慢”,更粗糙,就像它在大块滚动一样。
这个gridview存在于TabLayout中,其中我还有一个包含许多元素的ListView。在gridview中使用98个图像时,此列表视图中的滚动也会受到影响。所以它就像整个应用程序以某种方式变慢(或使用比电话可以管理的更多“功率”)。
有什么方法可以优化gridview,所以它不会使用那么多的力量?
(PS:当使用大约150张图像时,应用程序只是停止工作(它断开连接,日志/调试中没有显示错误)。)
答案 0 :(得分:4)
确保在适配器的getView()方法中回收图像。像这样:
public View getView(int position, View convertView, ViewGroup parent) {
// if it's not recycled, initialize some attributes
if (convertView == null) {
convertView = new View(...);
}
...
每次调用getView()时都不会创建新的视图。
答案 1 :(得分:2)
答案 2 :(得分:1)
我不在Android中编码,但我建议使用懒惰的可见性方法。 所有图像看起来都是相同的尺寸,因此处理滚动事件并仅显示当前视锥体(屏幕)上可见的图像,同时隐藏其余图像。
我的猜测是,Android正在对滚动期间无法看到的图像使用其处理能力,从而导致抖动。
答案 3 :(得分:0)
首先,不要将所有位图保留在内存private Bitmap[] mBitmap;
中。这可能是你的应用程序崩溃的原因。使用BitmapFactory
从文件系统中读取它们。
其次,您不应该在适配器中缩放图像,这很昂贵:
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
尝试使用一组不需要缩放的图像。