假设我有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
循环解决方案会有所帮助吗?
答案 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或至少使用中央工厂来获取实例)并对您需要的方法进行简单调用。