Java 如何避免在使用毕加索库加载图像时使用样板代码
假设我有一个带有4个ImageView的布局。每个ImageView必须包含从远程url下载的图片。我可以用毕加索图书馆轻松完成这样的任务:Java 如何避免在使用毕加索库加载图像时使用样板代码,java,android,android-layout,android-studio,picasso,Java,Android,Android Layout,Android Studio,Picasso,假设我有一个带有4个ImageView的布局。每个ImageView必须包含从远程url下载的图片。我可以用毕加索图书馆轻松完成这样的任务: Picasso.with(context) .load(photo1Url) .placeholder(R.drawable.image_view_placeholder) .error(R.drawable.image_view_error_placeholder)
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对象引用?也许某种循环解决方案会有所帮助?我强烈建议您在应用程序中创建一个ImageLoader“服务” 首先,使用下载图像并设置为
ImageView
或获取位图或相关功能所需的方法创建一个界面:
public interface ImageService {
public void downloadAndSetImage(Context context, String url, ImageView image);
//Other important methods to you
}
有了这个,你可以用毕加索或其他下载系统来实现。例如,在不中断应用程序的情况下更改或测试其他系统时,这非常有用
之后,使用所有样板代码创建方法的实现
public class PicassoImageImpl implements ImageService {
@Override
public void downloadAndSetImage(Context context, ImageDownloadInfo imageDownloadInfo) {
//All picasso code
}
}
然后在应用程序中,您只需实例化ImageService(我强烈建议您使用DependencyInyAction或至少使用一个中心工厂来获取实例)并对所需的方法进行简单调用。您可以创建具有可设置样式属性的自定义imageview,以提供一些静态值,并在从xml创建ciew时设置这些值