Как загрузить изображения одно за другим в ImageView вместо видоискателя? - PullRequest
0 голосов
/ 29 ноября 2011

Мой проект - показ слайдов изображений из выбранной папки.

Я выполнил проект с использованием ViewFlipper.Проблема, в которой я застрял, - это проблемы с памятью при загрузке большего количества изображений в видоискатель.Я получаю ошибку принудительного закрытия, если папка содержит более 15 изображений.

Bitmap mBitmap=BitmapFactory.decodeFile(ImageList.get(i));
    image.setImageBitmap(mBitmap);

    viewFlipper.addView(image);
    System.gc();

    }
    viewFlipper.startFlipping();

Как можно устранить эту ошибку " out of memory ", любые другие обходные пути?Я где-то слышал, что мы можем использовать одно изображение и просто изменить изображение во время выполнения.Любые указатели относительно того, как мне начать?Мне также нужно установить временной интервал между изменениями изображения.

РЕДАКТИРОВАТЬ: использовал ImageView вместо видоискателя, и теперь я могу отображать одно изображение.Как я могу изменить изображение в режиме просмотра изображений, скажем, через 5 секунд?Код, который я реализовал в onCreate:

 ImageView imgView01 = (ImageView) findViewById(R.id.imageView1);  
            File dir = new File("/sdcard/WallpapersHD/");
             File file[]=dir.listFiles();

             for (int i=0;i<file.length;i++) {


                 Drawable d = (Drawable) Drawable.createFromPath(file[i].toString());


                 imgView01.setImageDrawable(d);

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Каждый раз, когда вы показываете новый Bitmap, вызывайте recycle () на предыдущем изображении. Это освободит место в памяти, поэтому вы не получите ошибку утечки окна, связанную с растровыми изображениями.

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

Если вы ищете для использования одного ImageView, то вы должны использовать postdelayed() и handlers().

Используйте этот метод в вашем onCreate(),

private Runnable mUpdateTimeTask = new Runnable() {
    public void run() {

        imageView.removeCallbacks(mUpdateTimeTask);
        imageView.postDelayed(this, 1000);
        imageView.setBackgroudRsource(R.drawable.urImage);

    }
};

А теперь при необходимости вызовите эти методы,

    imageView.removeCallbacks(mUpdateTimeTask);
    imageView.postDelayed(mUpdateTimeTask, 1000); //1 sec delay to change images
...