Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何避免在使用毕加索库加载图像时使用样板代码_Java_Android_Android Layout_Android Studio_Picasso - Fatal编程技术网

Java 如何避免在使用毕加索库加载图像时使用样板代码

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)

假设我有一个带有4个ImageView的布局。每个ImageView必须包含从远程url下载的图片。我可以用毕加索图书馆轻松完成这样的任务:

    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时设置这些值