如何在ImageView中使用URL引用的图像?


当前回答

我最近在这里找到了一个线程,因为我必须为带有图像的列表视图做类似的事情,但原理很简单,正如您可以在那里显示的第一个示例类中读到的那样(由jleedev)。 你得到图像的输入流(从网络)

private InputStream fetch(String urlString) throws MalformedURLException, IOException {
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpGet request = new HttpGet(urlString);
    HttpResponse response = httpClient.execute(request);
    return response.getEntity().getContent();
}

然后你将图像存储为可绘制的,你可以将它传递给ImageView(通过setImageDrawable)。同样从上面的代码片段来看一下整个线程。

InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");

其他回答

这是一个迟到的回复,正如上面所建议的AsyncTask将会和谷歌一点后,我发现了一个解决这个问题的方法。

Drawable Drawable = Drawable. createfromstream ((InputStream) new URL(" URL ").getContent(), "src");

imageView.setImageDrawable(可拉的);

这是完整的功能:

public void loadMapPreview () {
    //start a background thread for networking
    new Thread(new Runnable() {
        public void run(){
            try {
                //download the drawable
                final Drawable drawable = Drawable.createFromStream((InputStream) new URL("url").getContent(), "src");
                //edit the view in the UI thread
                imageView.post(new Runnable() {
                    public void run() {
                        imageView.setImageDrawable(drawable);
                    }
                });
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();
}

不要忘记在你的AndroidManifest.xml中添加以下权限来访问互联网。

< uses-permission android: name = " android.permission。互联网" / >

我自己也试过,还没有遇到任何问题。

这里有很多好的信息…我最近发现了一个叫SmartImageView的类,到目前为止它似乎工作得很好。非常容易合并和使用。

http://loopj.com/android-smart-image-view/

https://github.com/loopj/android-smart-image-view

更新:我最后写了一篇关于这个的博客文章,所以看看它对使用SmartImageView的帮助。

第二次更新:我现在总是用毕加索做这个(见上文),强烈推荐它。:)

如果你是在点击按钮的基础上加载图像,上面接受的答案是很棒的,但是如果你是在一个新的活动中做这件事,它会冻结UI一到两秒钟。环顾四周,我发现一个简单的asynctask消除了这个问题。

要使用asynctask,在activity的末尾添加这个类:

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }    
}

从你的onCreate()方法调用使用:

new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
        .execute(MY_URL_STRING);

结果是一个快速加载的活动和一个稍后根据用户的网络速度显示的imageview。

imageView.setImageBitmap(BitmapFactory.decodeStream(imageUrl.openStream()));//try/catch IOException and MalformedURLException outside

你也可以使用LoadingImageView视图从url加载图片:

http://blog.blundellapps.com/imageview-with-loading-spinner/

一旦你从链接中添加了类文件,你就可以实例化一个url图像视图:

在xml:

<com.blundell.tut.LoaderImageView
  android:id="@+id/loaderImageView"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  image="http://developer.android.com/images/dialog_buttons.png"
 />

在代码:

final LoaderImageView image = new LoaderImageView(this, "http://developer.android.com/images/dialog_buttons.png");

并更新它使用:

image.setImageDrawable("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png");