ImageSwitcher 从 url 加载图像



我正在尝试在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中使用。通常我们在ViewFactory中创建一个ImageView。然后,在 ImageSwitcher 类中使用此ImageView来绘制具有指定图像源的视图。下面是ImageSwitcher类的setImageResource()方法。

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中。然后,将可绘制对象资源设置为它。

溶液

现在,有了这些信息,让我们找到解决方案!我正在使用凌空NetworkImageView,但您也可以使用毕加索或滑翔!您只需要稍微更改代码即可。

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

我的图像切换器.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" />

安卓清单.xml

不要忘记将android.permission.INTERNET包含在您的 Android 清单中.xml

做!

每当你想改变图像时,都这样做,

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

使用SliderLayot(https://github.com/daimajia/AndroidImageSlider(解决了这个问题,但我也会尝试使用ImageSwitcher。

当我降落在这里时,我试图实现同样的事情。我知道这是一个老问题,但由于我没有看到答案,我会告诉你对我有用的解决方案。

首先,我下载了要在图像切换器中显示的图像,并使用以下代码将它们作为位图返回:

InputStream in = new java.net.URL(url).openStream();
Bitmap bitmap = BitmapFactory.decodeStream(in);

然后我使用 imageSwitcher.setImageDrawable(new BitmapDrawable(getResources(), bitmap)) 在图像切换器中设置位图。

要使用 java.net.URL(url).openStream() ,您需要将<uses-permission android:name="android.permission.INTERNET">添加到AndroidManifest.xml文件中。

请记住,您可以更改下载代码以使其更好(例如检查超时(,但这只是一个基本的解决方案。

关于您使用的内容的另一件事,我认为您不能使用setImageURI()在您的ImageSwitcher中设置互联网资源。根据这篇文章,此方法仅适用于特定于 Android 平台的内容 URI(请注意,他们在那篇文章中谈论的是ImageView,但我认为这种情况也是如此(。

相关内容

  • 没有找到相关文章

最新更新