Android: быстрый слайдер изображений с * правильно повернутыми * изображениями
Существует множество примеров использования ViewPager в качестве слайдера изображений, но я не видел ни одного, который бы справлялся с проблемой правильно повернутых изображений:
Теперь на самом деле у меня есть решение для этого, но проблема в том, что скольжение изображения мучительно медленно, когда размер изображения превышает 3000*1500 пикселей из-за дополнительного шага вращения:
Сам ImageView не заботится о правильной ориентации при установке изображения с помощью setImageURI или setImageBitmap.
Это означает, что вы сначала должны выяснить правильную ориентацию самостоятельно, а затем в конечном итоге сделать
matrix.postRotate(rotation)
и создать новое растровое изображение, используя
Bitmap.createBitmap(srcBitmap, 0, 0, srcBitmap.getWidth(),
srcBitmap.getHeight(), matrix, true);
Это дополнительное создание растрового изображения действительно замедляет его.
Если бы был способ загрузки изображения, "повернутого на лету"? STH. как BitmapFactory.decodeStream(поток, матрица)?
Я также пытался увеличить значение ViewPager.setOffscreenPageLimit до 3, но в результате ошибки "java.lang.OutofMemoryError: размер растрового изображения превышает бюджет ВМ".
Каким-то образом это должно быть возможно, потому что в стандартном приложении "Галерея" скольжение происходит очень быстро даже с очень большими изображениями... Но я полагаю, это не тривиальная задача?
1 ответ
Наконец, я нашел решение: чтобы получить быстрое и плавное скольжение изображения, нужно сделать две вещи:
Выполните загрузку растрового изображения в фоновом режиме, используя AsyncTask https://developer.android.com/training/displaying-bitmaps/process-bitmap.html
Загрузите версию растрового изображения с уменьшенной выборкой, используя BitmapFactory.Options.inSampleSize (рассчитывается с использованием соотношения между размерами ViewPager и Bitmap)
https://developer.android.com/training/displaying-bitmaps/load-bitmap.html