在Android Honeycomb中加速Gallery小部件的提示

时间:2011-08-06 22:55:34

标签: android widget gallery android-3.0-honeycomb galleryview

我正在寻找一种加速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;
    }

我一直在尝试延迟加载图片,但我并不喜欢这个结果。

4 个答案:

答案 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”。

为了避免这种情况,你应该:

  1. 设置已缓存的临时加载drawable imageView.setImageResource(R.drawable.my_loading_drawable);
  2. 创建一个AsyncTask
    • 在doInBackground中加载drawable(即文件I / O)
    • 更新onPostExecute中的imageView imageView.setImageDrawable(绘制);
  3. PS如果用户轻弹多张图片,上述方法通常会触发多个并行异步,这些都将使用文件I / O.不利于性能并可能导致您的应用崩溃。你应该有更多的结构化方法,你一次只允许一个异步任务。