使用Volley框架实现网络图片的高效加载

Volley是google的开源框架,主要用于加载网络图片,可有效防止图片的的各种问题,其中有很多优秀算法,让图片高效进行加载.

一个简单使用Volley加载网络图片的例子.(listView显示)

volley框架下载地址:下载Volley

首先需要将volley导入到workspace—-在自己的Project中添加library

添加时需要注意:必须将volley框架与自己的project保持在同一个目录下面,否则会导入错误

1.主布局文件

<RelativeLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><ListViewandroid:id="@+id/lv_show"android:layout_width="fill_parent"android:layout_height="fill_parent"android:cacheColorHint="@android:color/transparent"></ListView></RelativeLayout>2.子布局文件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal" ><!–使用Volley自定义的ImageView –><com.android.volley.toolbox.NetworkImageViewandroid:id="@+id/iv_image"android:layout_width="65dp"android:layout_height="65dp"android:src="@drawable/ic_launcher"/></LinearLayout>3.采用Lru计算图片缓存package com.example.volleydemo;import android.content.Context;import android.graphics.Bitmap;import android.support.v4.util.LruCache;import com.android.volley.toolbox.ImageLoader.ImageCache;class VolleyBitmapLruCache extends LruCache<String, Bitmap> implements ImageCache { //采用Lru算法计算缓存public static int getDefaultLruCacheSize() {final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);final int cacheSize = maxMemory / 8;return cacheSize;}public VolleyBitmapLruCache(Context context) {this(context , getDefaultLruCacheSize());}public VolleyBitmapLruCache(Context context , int sizeInKiloBytes) {super(sizeInKiloBytes);}@Overrideprotected int sizeOf(String key, Bitmap value) {return value.getRowBytes() * value.getHeight() / 1024;}@Overridepublic Bitmap getBitmap(String url) {return get(url);}@Overridepublic void putBitmap(String url, Bitmap bitmap) {put(url, bitmap);}}4.MainActivity.javapackage com.example.volleydemo;import java.io.File;import java.util.ArrayList;import java.util.List;import com.android.volley.RequestQueue;import com.android.volley.toolbox.ImageLoader;import com.android.volley.toolbox.NetworkImageView;import com.android.volley.toolbox.Volley;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;public class MainActivity extends Activity {private ListView lv_show;private List<String> list; //存放网络图片地址private static ImageLoader imageLoader;//图片缓存器private MyAdapter myAdapter; //listView适配器@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);RequestQueue queue = Volley.newRequestQueue(this); //请求队列imageLoader = new ImageLoader(queue, new VolleyBitmapLruCache(this)); //创建图片缓存所存放的文件夹File f=new File("sdcard/abc");if(!f.exists()){f.mkdirs();}lv_show=(ListView) findViewById(R.id.lv_show);list=new ArrayList<String>();for (int i = 0; i < 10; i++) {list.add("");//存放网络图片地址list.add("");list.add("");list.add("");list.add("");list.add("");list.add("");}}@Overrideprotected void onResume() {super.onResume();if(myAdapter==null){myAdapter=new MyAdapter();}else{myAdapter.notifyDataSetChanged();}lv_show.setAdapter(myAdapter);}class MyAdapter extends BaseAdapter{@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int arg0) {return null;}@Overridepublic long getItemId(int arg0) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup arg2) {Holder holder=null;if(convertView==null){holder=new Holder();convertView=getLayoutInflater().inflate(R.layout.lv_item,null); //将子布局加入内存holder.iv_image=(NetworkImageView) convertView.findViewById(R.id.iv_image); //找到图片convertView.setTag(holder);//将控件放入缓存}else{holder=(Holder) convertView.getTag();}holder.iv_image.setImageUrl(list.get(position), imageLoader); //直接设置图片地址到NetworkImage,并将图片放入缓存holder.iv_image.setDefaultImageResId(R.drawable.ic_launcher); //当图片还没加载出来时显示的图片return convertView;}}class Holder {NetworkImageView iv_image;}}通过以上几步就可以实现Volley加载图片.

附上源码:

,记忆像是倒在手心里的水,不论是摊平还是握紧,

使用Volley框架实现网络图片的高效加载

相关文章:

你感兴趣的文章:

标签云: