从服务器下载图片并显示进度到ImageView

3

我是ListView,希望在使用Picasso库下载图片到ImageView之前,显示进度条。目前在下载过程中仍然会显示ic_launcher drawable,但如果想要展示进度该怎么办?

    Picasso.with(context)
    .load(imageURL)
    .transform(transformation)
    .placeholder(R.drawable.ic_launcher)
    .error(R.drawable.ic_launcher)
    .into(viewHolder.imageView);
5个回答

6
在Google Developer Summit Thailand上,Google向我们介绍了一款名为Glide的Android图像加载库,由bumptech开发,并被Google推荐。至今已经在许多Google开源项目中使用,包括Google I/O 2014官方应用程序。
这使我很感兴趣。我花了整个晚上来玩它,并决定在这篇博客文章中分享我的经验。首先,我必须说它看起来和Picasso相似度达90%。更确切地说,我认为它是类似于Picasso的克隆。
但在细节方面有很大的不同。您将了解到这些区别。 http://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en

感谢分享这篇博客文章,非常有启发性和实用性,我将在未来的项目中使用Glide,我已经标记了您的答案为有用。 - Sophie

5
在您的xml文件中,您需要将进度条放在图像之上,并设置可见性。在您的代码中实现即可。
Picasso.with(context)
       .load(file)
       .into(imageView, new Callback() {
           @Override
           public void onSuccess() {
               progressbar.setVisibility(View.GONE);
           }
       });

当图片下载完成后,您需要使用 setVisibility(View.GONE) 将进度条隐藏。

2
在你放置ImageView的XML中添加ProgressBar,或者通过编程方式添加。然后你可以这样做:
 ProgressBar progressBar ; //initialize it as you dud with the imageView
    progressBar.setVisibility(View.VISIBLE);
    Picasso.with(context)
            .load(imageURL)
            .transform(transformation)
            .placeholder(R.drawable.ic_launcher)
            .error(R.drawable.ic_launcher)
            .into(viewHolder.imageView, new Callback() {
                @Override
                public void onSuccess() {
                    progressBar.setVisibility(View.GONE);
                }
                @Override
                public void onError() {
                }
            });

1
mProgressDialog = new ProgressDialog(getActivity());
        mProgressDialog.setMessage("Wait a moment, loading image...");
        mProgressDialog.setCanceledOnTouchOutside(false);
        mProgressDialog.setCancelable(false);
        mProgressDialog.show();

        Picasso.with(getActivity()).load(mImagePath).into(mImageView, new Callback() {
            @Override
            public void onSuccess() {
                mProgressDialog.dismiss();
            }

            @Override
            public void onError() {
                mProgressDialog.dismiss();
                Toast.makeText(getActivity(), "Download failed", Toast.LENGTH_LONG).show();
            }
        });

谢谢!在当前版本(2.71828)中,onError方法应该添加一个参数Exception:"public void onError(Exception e) {". - Federico Alvarez

0

我认为你可以使用 Picasso 的目标类

Target t = new Target() {
 @Override
 public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
         //hideProgress
}

@Override
public void onBitmapFailed(Drawable errorDrawable) {
           //hideProgress
}

 @Override
  public void onPrepareLoad(Drawable placeHolderDrawable) {

        //lshow Progress
 }
};

 Picasso.with(context)
.load(strImage)
.transform(transformation)
.placeholder(R.drawable.nothing_found)
.error(R.drawable.nothing_found)
.into(t);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接