Советы по ускорению виджета Галерея в Android Honeycomb - PullRequest
2 голосов
/ 07 августа 2011

Я ищу отличный способ ускорить виджет просмотра галереи в Android Honeycomb. В настоящее время я использую его для отображения довольно больших изображений размером примерно 340 x 600 пикселей, и я хотел бы, чтобы при прокрутке изображений оно было гладким, как масло.

В настоящий момент это довольно быстро, но это не сравнимо с загрузкой ScrollView с ImageViews и прокруткой.

Вот упрощенная версия моего 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 ]

2 голосов
/ 07 августа 2011

Галерея не поддерживает convertView в данный момент.Вы всегда получите null для convertView.Это известная проблема, и ETA для исправления не существует.

2 голосов
/ 07 августа 2011

Разница между использованием Gallery и:

при загрузке ScrollView с ImageViews и прокруткой этого

заключается в том, что в сценарии ScrollView выпредварительно загружают все изображения, а не загружают их «на лету», как в сценарии Gallery.

Если у вас мало изображений, и у вас достаточно ОЗУ для поддержки всех из них, тогда просто используйте свой ScrollView.

Помимо этого, AFAIK, вы не можете сделать тонну.Вы можете поддерживать кэш растрового изображения, в котором вы продолжаете декодировать несколько изображений, опережая текущие в Gallery, и получаете Adapter извлечение из кэша.Тем не менее, это только поможет вам - небольшие прокрутки будут гладкими, но отклонение от вашей емкости кеша все равно приведет к декодированию, выполняемому по требованию.Это в значительной степени неизбежно.

0 голосов
/ 09 ноября 2011

Одним из элементов, замедляющим просмотр галереи, является файловый ввод-вывод.Я работаю над приложением слайд-шоу, для которого у меня есть фотографии в разрешении 1280x720.Фактический файловый ввод / вывод занимает 300-400 мс для каждого файла.

Поскольку файловый ввод-вывод обычно запускается в потоке пользовательского интерфейса, это вызовет очень заметный «хик» при любом продолжающемся переходе к фотографии.

Чтобы этого избежать, вам следует:

  1. Установить временную загрузочную отрисовку, которая уже кешируется(т. е. файловый ввод / вывод)
  2. Обновляет imageView в onPostExecute imageView.setImageDrawable (drawable);

PS, если пользователь перелистывает несколько изображений,Приведенный выше подход, как правило, запускает несколько параллельных асинхронных задач, которые все будут использовать файловый ввод / вывод.Не хорошо для производительности и может привести к сбою вашего приложения.Вероятно, у вас должен быть более структурированный подход, когда вы разрешаете только одну асинхронную задачу за раз.

0 голосов
/ 31 октября 2011

Включение аппаратного ускорения вашего приложения окажет значительное влияние (по крайней мере, оно имело место в моем примере приложения).

Добавить android: hardwareAccelerated = "true" в элемент приложения вашего манифеста Android http://developer.android.com/guide/topics/manifest/application-element.html#hwaccel

...