我正在寻找一种加速Android Honeycomb中图库视图小部件的好方法。我目前正在使用它以大约340 x 600像素显示一些相当大的图像,并且我喜欢它在滚动图像时像黄油一样光滑。
目前它速度相当快,但它与使用ImageViews加载ScrollView并滚动浏览它相比并不比。
以下是我的自定义BaseAdapter的getView()
方法的简化版本:
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = (ImageView) new ImageView(Main.this);
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true;
((ImageView) convertView).setImageBitmap(createReflection(BitmapFactory.decodeFile(ImageFile, options)));
convertView.setPadding(20, 0, 20, 0);
return convertView;
}
我一直在尝试延迟加载图片,但我并不喜欢这个结果。
答案 0 :(得分:2)
使用Gallery
和:
使用ImageViews加载ScrollView并滚动浏览
与ScrollView
方案一样,您预先加载所有图片,而不是像Gallery
方案一样动态加载它们。
如果您的图片数量很少,并且您有足够的内存来支持所有图片,那么只需使用ScrollView
。
除此之外,AFAIK你可以做的不是很多。您可以维护位图缓存,继续在Gallery
中的当前图像之前解码几个图像,并从缓存中拉出Adapter
。但是,这只会让你到目前为止 - 小卷轴将是平滑的,但是超过你的缓存容量仍然会导致解码按需完成。这几乎是不可避免的。
答案 1 :(得分:2)
Gallery目前不支持convertView。您将始终为convertView接收null。这是一个已知问题,并且没有针对修复的ETA。
答案 2 :(得分:0)
启用应用程序的硬件加速将产生重大影响(至少在我的示例应用程序上有它)。
在Android清单的应用程序元素中添加android:hardwareAccelerated =“true” http://developer.android.com/guide/topics/manifest/application-element.html#hwaccel
答案 3 :(得分:0)
减慢Gallery视图速度的一个因素是文件IO。 我正在制作一个幻灯片应用程序,我有1280x720分辨率的照片。 每个文件的实际文件I / O需要300-400毫秒。
由于文件I / O通常会在UI线程上运行,因此在任何正在进行的照片转换中都会产生非常明显的“hick”。
为了避免这种情况,你应该:
PS如果用户轻弹多张图片,上述方法通常会触发多个并行异步,这些都将使用文件I / O.不利于性能并可能导致您的应用崩溃。你应该有更多的结构化方法,你一次只允许一个异步任务。