Как установить индикатор выполнения с помощью галереи (с помощью LazyLoading)? - PullRequest
0 голосов
/ 28 октября 2011

Я использую Fedors LazyLoad в проекте.

Я хочу вместо отображения изображения заполнителя в галерее узнать, есть ли способ изменить этот код для отображенияProgressBar для каждой загрузки изображения?

public class ImageLoader {

MemoryCache memoryCache=new MemoryCache();
FileCache fileCache;
private Map<ImageView, String> imageViews=Collections.synchronizedMap(new WeakHashMap<ImageView, String>());

public ImageLoader(Context context){
    //Make the background thead low priority. This way it will not affect the UI performance
    photoLoaderThread.setPriority(Thread.NORM_PRIORITY-1);

    fileCache=new FileCache(context);
}
// Getting reference to the stub picture
final int stub_id=R.drawable.stub;
public void DisplayImage(String url, Activity activity, ImageView imageView)
{
    imageViews.put(imageView, url);
    Bitmap bitmap=memoryCache.get(url);
    if(bitmap!=null){
        imageView.setImageBitmap(bitmap);
    Log.e(url, " Was in cache");
    }
    else
    {
         Log.e(url, " Was NOT in cache");
        queuePhoto(url, activity, imageView);
//If images arent in cache i set the stub, instead i would like to set a ProgressBar.
        imageView.setImageResource(stub_id);
    }    

1 Ответ

1 голос
/ 28 октября 2011

Примечание: этот код не компилируется, это просто для того, чтобы дать вам представление,

  1. Make displayImage() возвращает некоторое значение, например, указывающее количество изображений в кеше

  2. Я полагаю, вы используете его в getView()

    public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    if(convertView == null){
        vi = inflater.inflate(R.layout.galitem, null);
    ImageView image=(ImageView)vi.findViewById(R.id.galimage);
    int queueLength = imageLoader.DisplayImage(data[position], activity, image);
    if(queueLength > threshold) 
    {
        Message message = new Message();   
        message.what = TestHandler.SHOW_THE_DAMN_SPINNER_PROGRESS;       
        activity.myHandler.sendMessage(message);             
    }  
    }
    
    return vi;    
    }
    

И измените ImageLoader

          class PhotosLoader extends Thread {
            @Override
            public void run() {
                try {
                    while (true) {
                        //thread waits until there are any images to load in the queue
                        if (photosQueue.photosToLoad.size() == 0)
                            synchronized (photosQueue.photosToLoad) {
                                photosQueue.photosToLoad.wait();
                            }
                        if (photosQueue.photosToLoad.size() != 0) {
                            PhotoToLoad photoToLoad;
                            synchronized (photosQueue.photosToLoad) {
                                photoToLoad = photosQueue.photosToLoad
                                        .pop();
                            }
                            Bitmap bmp = getBitmap(photoToLoad.url);
                            cache.put(photoToLoad.url, bmp);
                            if (((String) photoToLoad.imageView.getTag())
                                    .equals(photoToLoad.url)) {
                                BitmapDisplayer bd = new BitmapDisplayer(
                                        bmp, photoToLoad.imageView);
                                Activity a = (Activity) photoToLoad.imageView
                                        .getContext();
                                a.runOnUiThread(bd);
                                Message message = new Message();   
                                message.what = TestHandler.REMOVE_PROGRESS_BAR;       
                                a.myHandler.sendMessage(message);    
                            }

                        }
                        if (Thread.interrupted())
                            break;
                    }
                } catch (InterruptedException e) {
                    //allow thread to exit
                }
            }
        }
  1. В вашей деятельности

     Handler myHandler = new Handler() { 
    
     ProgressDialog dialog = null; 
     public void handleMessage(Message msg) {   
     switch (msg.what) {   
     case TestHandler.SHOW_THE_DAMN_SPINNER_PROGRESS:   
              dialog  = ProgressDialog.show(this, "Working..", "Reloading cache", true,
                            false);
    
      break;   
    
        case TestHandler.REMOVE_PROGRESS_BAR: 
        dialog.dismiss();
        break;  
               }   
        super.handleMessage(msg);   
          }   
     };
    
...