我正在尝试在ImageSwitcher中显示来自URL的图像。我尝试过:

myImageSwitcher.setImageURI(Uri.parse(“ http://miurl.com/images/foto01.jpg”));

但它告诉我这个“错误”:

I / System.out:resolveUri在错误的位图uri上失败:http://miurl.com/images/foto01.jpg

谢谢

最佳答案

我知道已经很晚了,但是因为我找到了一个更好的解决方案,所以希望与所有人分享:)

我必须查看默认ImageSwitcher的源代码,并了解其工作原理。每当我们使用ImageSwitcher时,都会为其设置一个ViewFactory。此ViewFactory创建View,然后在ImageSwitcher中使用。通常我们在ImageView中创建一个ViewFactory。然后在ImageView类中使用此ImageSwitcher来绘制具有指定图像源的视图。下面是setImageResource()类的ImageSwitcher方法。

public void setImageResource(@DrawableRes int resid){
    ImageView image = (ImageView)this.getNextView();
    image.setImageResource(resid);
    showNext();
}


让我们关注该方法的第一行和第二行。

ImageView image = (ImageView)this.getNextView();
image.setImageResource(resid);


this.getNextView()ViewFactory获取视图,并将视图转换为ImageView。然后,将Drawable资源设置为该资源。



现在,有了这些信息,让我们开始解决方案!我正在使用Volley的NetworkImageView,但是您也可以使用Picasso或Glide!您只需要稍微更改一下代码即可。

我们需要创建一个自定义ImageSwitcher。这是我的代码

MyImageSwitcher.java

public class MyImageSwitcher extends ImageSwitcher {

    public MyImageSwitcher(Context context) {
        super(context);
    }

    public MyImageSwitcher(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setImageUrl(String url) {
        NetworkImageView image = (NetworkImageView) this.getNextView();
        image.setImageUrl(url, AppController.getInstance().getImageLoader());
        showNext();
    }
}


注意setImageUrl()方法。我们将从getNextView()获得的视图转换为NetworkImageView并将其设置为Url。如果要使用毕加索,只需将其转换为ImageView,然后根据需要使用毕加索即可。

活动

MyImageSwitcher imageSwitcher = (MyImageSwitcher) findViewById(R.id.imageSwitcher);
imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
        public View makeView() {
            NetworkImageView myView = new NetworkImageView(getApplicationContext());
            myView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            myView.setLayoutParams(new ImageSwitcher.LayoutParams(imageSwitcher.getLayoutParams()));
            return myView;
        }
});


如果要使用毕加索,则只需使用ImageView

布局

<xyz.farhanfarooqui.loadingimages.MyImageSwitcher
        android:id="@+id/imageSwitcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


AndroidManifest.xml

不要忘记在您的AndroidManifest.xml中包含android.permission.INTERNET

做完了!

每当您要更改图像时,都可以通过这种方式进行操作,

imageSwitcher.setImageUrl("http://miurl.com/images/foto01.jpg");

10-07 13:00