Android Universal Image Loader存储下载的进度列表视图

时间:2014-11-27 06:14:54

标签: android android-listview universal-image-loader

我在ListView中使用Universal Image Loader。我的问题是以下用例:

当我滚动列表视图时,它完美运行,并加载所有图像。让我们假设,我在listview的屏幕上有2个项目,它们处于下载进度中。我可以通过ImageLoadingProgressListener()看到它的进展,只要我滚动到任何地方并回到相同的图像,进展再次开始,以前下载的数据丢失!有没有办法存储下载的进度,以便稍后当我们回到listview中的图像时,它可以恢复该过程。

编辑:我可以在下载后缓存这些图像,并且还可以使用这些缓存的图像,我的问题是那时正在下载,滚动和回来。

我的DisplayImageOptions

options =  new DisplayImageOptions.Builder()
                    .displayer(new RoundedBitmapDisplayer(100))
                    .cacheInMemory(true)
                    .cacheOnDisk(true)
                    .considerExifParams(true)
                    .bitmapConfig(Bitmap.Config.RGB_565)
                    .build();

我的ImageLoaderConfiguration

new ImageLoaderConfiguration.Builder(context)
                .threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())
                .diskCacheSize(50 * 1024 * 1024) // 50 Mb
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                .writeDebugLogs() // Remove for release app
                .build();

我的getView()

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

        ViewHolder holder;

        if(convertView == null){

            convertView = inflater.inflate(R.layout.card, parent,false);

            holder = new ViewHolder();

            holder.ivContent = (ImageView) convertView.findViewById(R.id.ivContent);

            convertView.setTag(holder);
        }
        else{
            holder = (ViewHolder) convertView.getTag();
        }
        try {
            ImageLoader.getInstance().displayImage(url, holder.ivContent, options, new        SimpleImageLoadingListener(){
                @Override
                public void onLoadingComplete(String imageUri, View view,Bitmap loadedImage){
                    holder.ivContent.setVisibility(View.VISIBLE);
                }
            },
            new ImageLoadingProgressListener() {
                @Override
                public void onProgressUpdate(String arg0, View arg1, int count, int total) {
                    System.out.println("prog: "+(count*100)/total);
                    //holder.ivLoaderUp.setClipping((count*100)/total);
                }
            });
         }   
         catch (ParseException e) {
             e.printStackTrace();
         }
        return convertView;
   }

有没有人遇到这个问题,请帮忙。

3 个答案:

答案 0 :(得分:1)

使用最新版本的Image加载程序库,但我建议您尝试智能映像,只需从以下URL下载库即可 的 http://www.4shared.com/folder/iw0vL8m6/_online.html 将此jar文件放在Android应用程序的libs /文件夹中。

将SmartImageView添加到活动的xml布局中:

<com.loopj.android.image.SmartImageView
    android:id="@+id/my_image" />

Activity

SmartImageView myImage = (SmartImageView) this.findViewById(R.id.my_image);

将图像从URL加载到视图中:

myImage.setImageUrl("http://www.YOUR_URL/myawesomeimage.jpg");

它是我使用Image loader的最好的一个,但这个库很有效率。

答案 1 :(得分:1)

您可以找到为何重新开始加载的答案 - here。如果加载的图像数据少于75%,UIL将中止下载。如果您想要更改它,那么您应该更改IoUtil类的来源。改变常数:

public static final int CONTINUE_LOADING_PERCENTAGE = 75;

public static final int CONTINUE_LOADING_PERCENTAGE = 0;

答案 2 :(得分:0)

我建议你为此尝试AQuery。

您可以从here下载jar文件,下载jar文件并将jar设置为Build Path。

 AQuery androidAQuery=new AQuery(this);

作为直接从网址加载图片的示例:

androidAQuery.id(ucover).image(user_pro, true, true); // Here, true, true means fileCache and MemoryCache respectively. So you can store it in memory or in file, so each and every time it will not downloaded.