2

我正在寻找一种在 Android Honeycomb 中加速图库视图小部件的好方法。我目前正在使用它来显示一些大约 340 x 600 像素的相当大的图像,我希望它在滚动图像时像黄油一样光滑。

目前它相当快,但它无法与加载带有 ImageViews 的 ScrollView 并滚动浏览相比。

getView()这是我的自定义 BaseAdapter 方法的简化版本:

        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

4 回答 4

2

使用和的区别Gallery

加载带有 ImageViews 的 ScrollView 并在其中滚动

是在ScrollView场景中,您正在预加载所有图像,而不是像在Gallery场景中那样动态加载它们。

如果您的图像数量很少,并且您有足够的 RAM 来支持所有图像,那么只需使用您的ScrollView.

除此之外,AFAIK 你无能为力。您可以维护一个位图缓存,您可以在其中继续在当前图像之前解码一些图像,GalleryAdapter从缓存中提取。然而,这只能让你走这么远——小卷轴会很流畅,但是超过你的缓存容量仍然会导致解码是按需完成的。这几乎是不可避免的。

于 2011-08-06T23:24:38.010 回答
2

Gallery 目前不支持 convertView。对于 convertView,您将始终收到 null。这是一个已知问题,没有 ETA 可修复。

于 2011-08-07T06:13:31.270 回答
0

打开应用程序的硬件加速将产生重大影响(至少对我的示例应用程序有影响)。

在您的 android 清单http://developer.android.com/guide/topics/manifest/application-element.html#hwaccel的应用程序元素中添加 android:hardwareAccelerated="true"

于 2011-10-31T10:14:18.150 回答
0

文件 IO 是减慢图库视图的因素之一。我正在开发一个幻灯片应用程序,我有 1280x720 分辨率的照片。每个文件的实际文件 I/O 需要 300-400 毫秒。

由于文件 I/O 通常在 UI 线程上运行,这将在任何正在进行的照片转换中导致非常明显的“hick”。

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

  1. 设置一个已经缓存的临时加载drawable imageView.setImageResource(R.drawable.my_loading_drawable);
  2. 创建一个 AsyncTask
    • 在 doInBackground 中加载可绘制对象(即文件 I/O)
    • 更新 onPostExecute 中的 imageView imageView.setImageDrawable(drawable);

PS如果用户浏览多张图片,上述方法通常会触发多个并行异步任务,这些任务都将使用文件I/O。对性能不利,可能会使您的应用程序崩溃。您可能应该采用更结构化的方法,一次只允许一个异步任务。

于 2011-11-09T19:51:18.763 回答