2014-12-04 110 views

回答

0

當我登陸這裏時,我試圖達到同樣的目的。我知道這是一個老問題,但由於我沒有看到答案,我會告訴你解決方案對我有用。

首先,我下載的圖像/秒,我想在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,但我認爲同樣進入這種情況下)。

1

我知道這是晚了,但因爲我找到了一個更好的解決方案對於這一點,希望能與所有:)

我不得不看的默認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。這裏是我的代碼

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中

不要忘記,包括android.permission.INTERNET到AndroidManifest.xml

完成!

每當你想改變形象,做這種方式,

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