2014-12-04 108 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");