Загрузка изображений в фоновом режиме при отображении списка - PullRequest
6 голосов
/ 30 июля 2010

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

Как мне это сделать?

Ответы [ 3 ]

2 голосов
/ 17 февраля 2011

Вы можете попробовать использовать мою платформу lazy-drawables (лицензию GPL v3):

https://github.com/rtyley/lazy-drawables

- к сожалению, она еще не совсем готова к производству, носреди вещей, которые он пытается обработать:

  • фоновая (не-UI-нить) загрузка ресурсов изображения
  • эффективное кэширование масштабированных растровых изображений - для варианта использования, в котором вы находитесьзагружая одно большое изображение, и я хочу показать его сотни раз в виде значка меньшего размера в виде списка или что-то в этом роде
  • прозрачность использования, под которой я подразумеваю ...

... как только у вас настроен ленивый отрисовываемый сеанс, заполнить представление изображения так же просто, как:

Drawable avatarDrawable = imageSession.get(someUserIdentifier); // doesn't block
imageView.setImageDrawable(avatarDrawable);

Вы не заботитесь , что он может иметь сразувернул вам обычное растровое изображение или, возможно, породил асинхронную задачу и возвратил нарисованный заполнитель - этот объект обновится сам и его ImageView хоста, когда асинхронная задача завершится.

В любом случае, это теория.Кажется, что-то вроде работает, но иногда это самопроизвольное обновление пользовательского интерфейса не происходит ... не знаю почему: -}

0 голосов
/ 31 июля 2010

Использование AsyncTask загрузка в фоновом режиме при отображении вашего пользовательского интерфейса

    File imageFile;

Сохранить изображения из Интернета

public View getView(int position, View convertView, ViewGroup parent) {    
    imageFile = new File("/sdcard/jorgesysTemp/" + Arraypicname(position);
    if(!imageFile.exists()){ 
     AsyncTaskProcess() //Download your images to sdcard
    }

Когда вы щелкаете по списку, загружаете изображение с SDCard

    @Override
    protected void onListItemClick(ListView l, View v, final int position, long id) {
     //load from sdcard
        Bitmap bitmapImg = BitmapFactory.decodeFile("/sdcard/jorgesysTemp/" + Arraypicname(position));
        BitmapDrawable drawableImg = new BitmapDrawable(bitmapImg );                
        myimageview.setImageDrawable(drawableImg );
...
...
...     
0 голосов
/ 31 июля 2010

Проверка WebImageView от matthias käppler.

Вы можете заменить его способ кэширования изображений на нужную вам функцию SDcard.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...