ImageLoader下载图片

乐正涵忍
2023-12-01

Volley框架在请求网络图片方面也做了很多工作,提供了好几种方法.本文介绍使用ImageLoader来进行网络图片的加载.
ImageLoader的内部使用ImageRequest来实现,它的构造器可以传入一个ImageCache缓存形参,实现了图片缓存的功能,同时还可以过滤重复链接,避免重复发送请求。

下面是ImageLoader加载图片的实现方法:

 RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
                ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
                ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.game_achieve_grade, R.mipmap.game_achieve_grade);
                imageLoader.get("http://www.xxjxsj.cn/article/UploadPic/2009-10/2009101018545196251.jpg", listener);

使用ImageLoader.getImageListener()方法创建一个ImageListener实例后,在imageLoader.get()方法中加入此监听器和图片的url,即可加载网络图片.

下面是使用LruCache实现的缓存类

public class BitmapCache implements ImageCache {
    private LruCache<String, Bitmap> cache;
    public BitmapCache() {
        cache = new LruCache<String, Bitmap>(8 * 1024 * 1024) {
            @Override
            protected int sizeOf(String key, Bitmap bitmap) {
                return bitmap.getRowBytes() * bitmap.getHeight();
            }
        };
    }
    @Override
    public Bitmap getBitmap(String url) {
        return cache.get(url);
    }
    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        cache.put(url, bitmap);
    }
}

最后,别忘记在AndroidManifest.xml文件中加入访问网络的权限

完整代码

主函数

public class ImageLoaderActivity extends AppCompatActivity {

    private ImageView imageView;
    private NetworkImageView networkImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_imageloader);
        imageView = (ImageView) findViewById(R.id.image_view);
        networkImageView = (NetworkImageView) findViewById(R.id.netimage);
        Button btnGetImage = (Button) findViewById(R.id.get_image);
        btnGetImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
                ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
                ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.game_achieve_grade, R.mipmap.game_achieve_grade);
                imageLoader.get("http://www.xxjxsj.cn/article/UploadPic/2009-10/2009101018545196251.jpg", listener);
       //下面这一句也可以加载图片,只是没用到listener
//                networkImageView.setImageUrl("http://pica.nipic.com/2007-11-09/200711912453162_2.jpg", imageLoader);

            }
        });
    }

    public class BitmapCache implements ImageLoader.ImageCache {
        private LruCache<String, Bitmap> cache;

        public BitmapCache() {
            cache = new LruCache<String, Bitmap>(8 * 1024 * 1024) {
                @Override
                protected int sizeOf(String key, Bitmap bitmap) {
                    return bitmap.getRowBytes() * bitmap.getHeight();
                }
            };
        }

        @Override
        public Bitmap getBitmap(String url) {
            return cache.get(url);
        }

        @Override
        public void putBitmap(String url, Bitmap bitmap) {
            cache.put(url, bitmap);
        }
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<Button
    android:id="@+id/get_image"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="获取图片"/>

   <com.android.volley.toolbox.NetworkImageView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:id="@+id/netimage">

   </com.android.volley.toolbox.NetworkImageView>


    <ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/game_achieve_horse"/>
</LinearLayout>

详细介绍可查看:点击查看

 类似资料: