使用Picasso库加载图像时如何避免样板代码

时间:2015-08-23 14:50:09

标签: java android android-layout android-studio picasso

假设我有4个ImageView的布局。每个ImageView必须包含从远程URL下载的图片。像Picasso这样的任务我可以轻松实现这样的任务:

    Picasso.with(context)
            .load(photo1Url)
            .placeholder(R.drawable.image_view_placeholder)
            .error(R.drawable.image_view_error_placeholder)
            .centerCrop()
            .tag(context)
            .fit()
            .into(feedListViewPhoto1);


    Picasso.with(context)
            .load(photo2Url)
            .placeholder(R.drawable.image_view_placeholder)
            .error(R.drawable.image_view_error_placeholder)
            .centerCrop()
            .tag(context)
            .fit()
            .into(feedListViewPhoto2);

    Picasso.with(context)
            .load(photo3Url)
            .placeholder(R.drawable.image_view_placeholder)
            .error(R.drawable.image_view_error_placeholder)
            .fit()
            .centerCrop()
            .tag(context)
            .fit()
            .into(feedListViewPhoto3);

    Picasso.with(context)
            .load(photo4Url)
            .placeholder(R.drawable.image_view_placeholder)
            .error(R.drawable.image_view_error_placeholder)
            .centerCrop()
            .tag(context)
            .fit()
            .into(feedListViewPhoto4);

但也许有更紧凑的解决方案来实现这一目标?例如:只写一次“Picasso with”并传递所有必需的url和ImageView对象引用?也许某种for循环解决方案会有所帮助吗?

1 个答案:

答案 0 :(得分:1)

我强烈建议您在应用内创建一个ImageLoader“服务”。

首先,使用下载图像并设置为ImageView或获取相关位图或功能所需的方法创建一个界面:

public interface ImageService {

    public void downloadAndSetImage(Context context, String url, ImageView image);

    //Other important methods to you
}

有了这个,您可以使用Picasso或其他下载系统进行实现。例如,在不破坏应用程序的情况下更改或测试其他系统非常有用。

之后使用所有样板代码为方法创建实现。

public class PicassoImageImpl implements ImageService {

    @Override
    public void downloadAndSetImage(Context context, ImageDownloadInfo imageDownloadInfo) {
        //All picasso code
    }
}

然后在您的应用程序中,您只需要实现您的ImageService(我强烈建议您使用DependencyInyection或至少使用中央工厂来获取实例)并对您需要的方法进行简单调用。