Android, как сделать слайд экрана?
Я строю очень основную галерею на Android, она показывает последнее изображение в папке камеры, и пользователь может скользить влево, чтобы увидеть предыдущий.
Я закончил реализацию с помощью viewpager и pagerAdapter, используя sampleSize для масштабирования изображений. Моя проблема в том, что реализация нигде не эффективна, как приложение галереи по умолчанию, каждый раз, когда вы перемещаете изображение, вам нужно подождать около 200 мс для следующей загрузки. Поэтому в основном моя идея о том, как его реализовать, не работает.
Как я могу сделать это эффективно и, если возможно, с реализацией, которая позволяет в дальнейшем изменять масштаб?
Это выглядит многообещающе, но я не знаю, как реализовать его с файлами вместо чертежей
http://www.androidviews.net/2012/11/photoview/
EDIT:
Мне удалось немного улучшить скорость, используя photoview (взломанный просмотрщик), однако для преобразования файлов в растровые изображения или чертежи требуется слишком много.
Я пробовал эти два метода, предложенные dilix и iDroid Explorer:
// Method A
Drawable d = Drawable.createFromPath(imagePath);
imageView.setImageDrawable(d);
// Method B
Bitmap myBitmap = BitmapFactory.decodeFile(imagePath);
imageView.setImageBitmap(myBitmap);
Но оба порождают ошибку Bitmap too large to be uploaded into a texture
. Мне нужно как можно быстрее получить изображение в ImageView и как-то обойти эту ошибку, и, может быть, я получу приличную скорость. Сейчас я масштабирую изображения и преобразовываю их в drawable, но это не очень эффективно.
Ответы
Ответ 1
Проверьте этот удивительный веб-сайт: http://www.androidviews.net/
и, возможно, это то, что вы хотите: http://www.androidviews.net/2012/11/photoview/
У него есть прокрутка страницы, масштабирование и панорамирование по мере необходимости
Я использовал его в своем проекте с некоторыми изменениями и ленивой загрузкой изображений. Он работает именно так, как вам нужно.
Ответ 2
1)
Это выглядит многообещающим, но я не знаю, как его реализовать с файлами вместо drawables http://www.androidviews.net/2012/11/photoview/
Вам необходимо сохранить список адаптеров в списке, но ссылки на файлы на SD-карте и загрузить его.
2) Но я могу представить, что файл вместо drawables будет не так эффективен, потому что для загрузки из файлов вам нужно проанализировать его с SD-карты.
Я думаю, что вы можете сэкономить время, одновременно загрузив несколько изображений в свою память (сжатый), и когда вы развернете свой образ, у вас уже будет изображение и память, а во время swyping вы можете начать загрузку другого изображения в память.
При переходе по галерее вы можете не загружать изображения и загружать их после почти остановки.
Это основная проблема: потребление памяти и производительность.
UPDATE
Я думаю, что лучше, чем исследовать это самостоятельно, будет изучаться существующий код галереи google: https://github.com/CyanogenMod/android_packages_apps_Gallery
Как я заметил - они хранят кеш (почти как я сказал о загрузке нескольких растровых изображений) и сохраняют только измененные изображения - кажется, эффективны.
Ответ 3
См. официальную документацию для отличного примера, который поможет вам эффективно использовать растровые изображения с помощью viewpager. Вы должны использовать кеш изображений, которые уже были загружены, и изображения должны быть загружены за пределы потока пользовательского интерфейса. Вы также хотите масштабировать изображение до минимального размера, необходимого для вашего дисплея (обычно с двумя степенями) - обратите внимание, что изображение не всегда будет масштабироваться до того, что вы просите!)
ViewPager также загружает изображения в фоновом режиме для подготовки к следующему слайду, который устанавливается с помощью метода setOffScreenPageLimit (по умолчанию обычно это хорошо, я думаю, что он 2.)
https://developer.android.com/training/displaying-bitmaps/index.html
Ответ 4
Я не уверен, было ли у вас правильное решение или нет. Но если вы хотите продолжить свою собственную реализацию с помощью данной ссылки, то:
http://www.androidviews.net/2012/11/photoview/ //this link is given in your question
И вы можете увидеть this SO, как конвертировать путь к файлу в drawable. Теперь вы получаете возможность рисовать свой указанный файл и реализовывать по ссылке, которую вы указали.
Я думаю, что ссылка будет работать хорошо.
Не стесняйтесь комментировать.