我试图在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中显示来自URL的图像。我试过:ImageSwitcher从url加载图像
myImageSwitcher.setImageURI(Uri.parse(“http://miurl.com/images/foto01.jpg”));
,但它说我这个 “错误”:
I/System.out的:resolveUri失败的坏位URI:http://miurl.com/images/foto01.jpg
感谢
我solucionated使用SliderLayot这个问题(https://github.com/daimajia/AndroidImageSlider ),但我也会尝试使用ImageSwitcher。
当我登陆这里时,我试图达到同样的目的。我知道这是一个老问题,但由于我没有看到答案,我会告诉你解决方案对我有用。
首先,我下载的图像/秒,我想在imageswitcher显示并返回它们作为使用此代码位图:
InputStream in = new java.net.URL(url).openStream();
Bitmap bitmap = BitmapFactory.decodeStream(in);
然后我用imageSwitcher.setImageDrawable(new BitmapDrawable(getResources(), bitmap))
设置位图的imageswitcher。
要使用java.net.URL(url).openStream()
,您需要将<uses-permission android:name="android.permission.INTERNET">
添加到您的AndroidManifest.xml
文件中。
请记住,您可以更改下载代码以使其更好(例如,检查超时),但这仅仅是一个基本的解决方案。
另一件关于你正在使用的东西,我认为你不能使用setImageURI()
在你的ImageSwitcher
中设置一个互联网资源。 Acording到this post,这种方法仅适用于内容的URI特别是Android平台(注意,他们都在谈论这个职位的ImageView
,但我认为同样进入这种情况下)。
我知道这是晚了,但因为我找到了一个更好的解决方案对于这一点,希望能与所有:)
我不得不看的默认ImageSwitcher
的源代码,并知道它是如何工作分享。每当我们使用ImageSwitcher
时,我们设置一个ViewFactory
。这ViewFactory
创建View
s然后用于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
。然后,将Drawable资源设置为它。
现在,有了这些信息,让我们找到解决方案!我正在使用Volley的NetworkImageView
,但你也可以使用毕加索或Glide!你只需要改变一下代码。
我们需要创建一个自定义的ImageSwitcher。这里是我的代码
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" />
不要忘记,包括android.permission.INTERNET
到AndroidManifest.xml
每当你想改变形象,做这种方式,
imageSwitcher.setImageUrl("http://miurl.com/images/foto01.jpg");