У меня есть активность, которая показывает некоторые полноэкранные изображения в кроссфейде. Всего 6 изображений. Для этого я использовал одновременно 2 анимации ImageViews и 2, один из которых уменьшает первое изображение, а второе - во втором. Я использовал это видео в качестве ссылки https://www.youtube.com/watch?v=9XbKMUtVnJAНепрерывный кроссфейд изображений и из памяти
Поскольку мне нужно, чтобы он работал непрерывно, я использовал таймер для планирования анимации каждые 4 секунды. Все работает, но использует огромное количество памяти. Для того, чтобы загрузить изображения, которые я пробовал:
- основной не рекомендуемый способ, используемый в видео, т.е. загружать все изображения в вытяжке массиве
- настройки изображения с помощью imageview.setImageResource
- загрузки изображений с использованием средств Picasso
Весь этот метод интенсивно связан с памятью, вызывая исключение из памяти на более старых устройствах (например, Galaxy S2). Подход Пикассо работает неправильно.
Я уверен, что есть лучший способ сделать это, но я не знаю, какие-либо предложения?
Вот соответствующий код:
private void animateImageview(){
prevImageView.animate().alpha(0);
nextImageView.animate().alpha(1).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mCurrentDrawable =
(mCurrentDrawable + 1) % imagesToShow.length;
int nextDrawableIndex =
(mCurrentDrawable + 1) % imagesToShow.length;
prevImageView.setImageResource(imagesToShow[mCurrentDrawable]);
nextImageView.setImageResource(imagesToShow[nextDrawableIndex]);
nextImageView.setAlpha(0f);
prevImageView.setAlpha(1f);
}
});
protected void onCreate(Bundle savedInstanceState) {
...
prevImageView.setImageResource(imagesToShow[0]);
nextImageView.setImageResource(imagesToShow[1]);
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
animateImageview();
}
}, 5000, 4000);
}
Edit: вариант largeHeap в манифесте, кажется, чтобы решить эту проблему, но я не уверен, что я делаю это дело прямо в любом случае.
Edit2: Сущности с решением я использовал https://gist.github.com/alexmazza/003e3449c02fe58848a9
Каков размер каждого изображения? – Fahim
Работает ли какое-то время, пока не закончится память? У вас может быть утечка памяти где-то. – JonasCz
Изображения 1536x2048 загружены в изображение с помощью centercrop (это почти полноэкранный режим). На моем Nexus 5 он не падает, но на S2 он разбился на третьем изображении. – alex