I think that's what I'm looking for. Can't wait to give it a try after work.
Although, I have another thread in my main Activity downloading all
pictures.
Thanks, I will give it a try.


Ivan Soto Fernandez
Web Developer
http://ivansotof.com



On Tue, Mar 24, 2009 at 8:37 AM, Streets Of Boston
<flyingdutc...@gmail.com>wrote:

>
> Here is a code-snippet. I may not compile, but i think you'll get the
> idea :-)
>
> [code]
> ExecutorService EXECUTOR = Executors.newFixedThreadPool(3); // max 3
> worker threads.
> ...
> public View getView(final AbsListView listView, View convertView, int
> pos, long id) {
>
>  ...
>  ...
>
>  final String imgUrl = ...
>  ...
>  final ImageView imgView = ...
>  ...
>  Bitmap bm = mBitmapCache.get(imgUrl);
>  if (bm != null)
>    imgView.setImageBitmap(bm);
>  else {
>    imgView.setTag(imgUrl);
>    FutureTask<?> task = EXECUTOR.submit(new Runnable() {
>      public void run() {
>        final Bitmap newBM = getImageFrom(imgUrl); // you have to
> write this method
>        if (newBM == null)
>          return;
>
>        // be sure that mBitmapCache is thread-safe.
>        mBitmapCache.put(imgUrl, newBM);
>
>        // instead of 'listView', you could use a new Handler
> instance.
>        listView.post(new Runnable() {
>          public void run() {
>              String checkUrl = (String)imgView.getTag();
>              if (checkUrl != null && !checkUrl.equals(imgUrl))
>                return;
>
>              imgView.setImageBitmap(newBM);
>          }
>        });
>      }
>
>      private Bitmap getImageFrom(String url) {
>        // download the data from imgUrl.
>        // create a bitmap from it.
>        return bitMap;
>      }
>    });
>  }
>
>  // if you want, you can hold on to 'task' and call 'cancel' on it if
> necessary, e.g.
>  // when this convertView is about to be re-used and to be assigned
> to a different image.
>  return convertView;
> }
> [/code]
>
> On Mar 24, 10:13 am, Streets Of Boston <flyingdutc...@gmail.com>
> wrote:
> > I've done the same in my apps for ListView (whether they be in
> > ListActivity or in a plain Activity) with good success.
> >
> > I use the java.util.concurrent's ExecutorService to obtain images:
> >
> > 1. Your getView(..) (or bindView/newView/etc) needs to assign an image/
> > thumbnail (bitmap) to an ImageView. But you don't have the bitmap yet.
> > If you do have it (store in a limited size cache), just set it .
> > 2. If not, obtain a FutureTask from the ExecutorService and this
> > FutureTask then will download the image, create a thumbnail from it
> > and creates a Bitmap from this thumbnail. Remember the id of the image
> > (can be an id, Uri, URL, whatever, as long as it is unique) and assign
> > it to the ImageView (setTag()).
> > 3. When ready, the FutureTask will 'post' back to the main-thread that
> > it has an new thumbnail.
> > 4. On the 'post'-back, loop through the children of ListView, get the
> > appropriate ImageView, the one whose tag (getTag()) is equal to the
> > one that FutureTask you got the image for, assign the Bitmap to this
> > ImageView. This is it.
> >
> > For myself I created a sub-system of ExecutorService and FutureTask,
> > called 'Cancelable' tasks, which make it easier to cancel queued up
> > tasks when they're no longer necessary. But this is an optimization.
> >
> > On Mar 24, 8:06 am, Mark Murphy <mmur...@commonsware.com> wrote:
> >
> >
> >
> > > Ivan Soto wrote:
> > > > Do you have any article/tutorial about the placeholder images to
> share?
> > > > I'm trying to find one with no luck.
> >
> > > I have used the technique, but not in code I'm allowed to share. I do
> > > need to more formally write this up at some point, but I do not have
> > > anything immediately handy.
> >
> > > The gist of it is that you create your adapter and set it up, in
> > > getView() or newView()/bindView() (depending on adapter choice), to see
> > > if the thumbnail has been downloaded. If so, use it for the list row
> > > being inflated/updated; if not, leave the ImageView in the row pointing
> > > to some placeholder Drawable resource. This means as the user scrolls,
> > > she will pick up the thumbnails. Also, at the end, you can quickly
> > > iterate over the rows (ListView is a ViewGroup, IIRC, so there are
> > > methods to iterate its children) and ensure each of those rows'
> > > ImageViews are using their associated thumbnails.
> >
> > > --
> > > Mark Murphy (a Commons Guy)http://commonsware.com
> > > Android App Developer Books:http://commonsware.com/books.html- Hide
> quoted text -
> >
> > - Show quoted text -
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to