Android: отображение изображения по умолчанию в галерее ImageView во время загрузки фактического изображения - PullRequest
0 голосов
/ 06 июля 2010

Я считаю, что это довольно тривиально, но я не могу заставить его работать.
Я хочу отобразить изображение по умолчанию в элементах галереи (ImageViews), пока их фактическое изображение извлекается из сети.
В данный момент ничего не показано для ImageView, изображение которого еще не появилось. Как только это прибывает, это немедленно показывается.
То, что я пытался сделать, это сразу после создания экземпляра ImageView вызвать его функцию setImageResource следующим образом:

final ImageView i = новый ImageView (mContext);
i.setImageResource (R.drawable.loading);

Но, похоже, это не работает. Ниже приведена полная функция getView ().
Любая помощь приветствуется.
Спасибо.

public View getView(int position, View convertView, ViewGroup parent) {

     final ImageView i = new ImageView(mContext);
     i.setImageResource(R.drawable.loading);


     // if the drawbale is in the buffer - fetch it from there
     Drawable bufferedImage = DataManager.getInstance().getImagesBuffer()[position];
     if (bufferedImage != null){
         i.setImageDrawable(bufferedImage);

         BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
         drawable.setAntiAlias(true);
     }
     // if drawable is not in buffer - fetch it from the net via AsyncImageLoader
     else
     {

         String imageUrl = DataManager.getInstance().getImageBufferInstance().getImageUrl(position);
         Drawable downloadedImage = AsyncImageLoader.getInstance().loadDrawable(imageUrl, new ImageCallback() {
         public void imageLoaded(Drawable imageDrawable, String imageUrl) {

                if (imageDrawable == null)
                {
                    imageDrawable = getResources().getDrawable(R.drawable.icon);
                }
                i.setImageDrawable(imageDrawable);

                BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
                drawable.setAntiAlias(true);    

                }
            });

         i.setImageDrawable(downloadedImage);
     }

     i.setLayoutParams(new CoverFlow.LayoutParams(Utils.getInstance().getScreenWidth() / 2,
             Utils.getInstance().getScreenHeight() / 2));
     i.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 


     return i;


 }

1 Ответ

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

Исправьте ваши отступы ... Если я правильно читаю, вы устанавливаете только временный значок рисования в обратном вызове imageLoaded вашего (не показан) AsyncImageLoader, который, как я предполагаю, означает, что он устанавливается только после изображениязагружается, а затем немедленно перезаписывается загруженным изображением.Попробуйте переместить код установки заполнителя в свой блок else за пределами обратного вызова.

...