我試圖在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");