chen52671的专栏

使用Android-Universal-Image-Loader加载网络图片

Android-Universal-Image-Loader是一个开源的Android图片加载辅助组件,其主要目的是图片加载,缓存,显示。提供了一系列配置选项和图片加载,缓存的控制。.

GitHub地址:https://github.com/nostra13/Android-Universal-Image-Loader

Android-Universal-Image-Loader的开源代码里本身是有示例代码的,在这里我们同样写一段代码,在界面上有一个GridView.然后从网络加载图片到GridView。

关于页面上下滑动,图片加载的问题,可以实现一个AbsListView.OnScrollListener,,在滑动的时候,触发notifyDataSetChanged来更新整个GridView所有的Item的View。但是从高效的角度,应该只刷新对应的View即可,因为新的Item滑出的时候,本来就是通过adapter的getView()返回应该刷新的那个Item的View,而对于其他已经存在的Item,是不需要在重新加载的。

Android-Universal-Image-Loader很好地解决图片异步加载的问题。在getView()中再去通过ImageLoader.displayImage()来从网络中获取图片也可以。它会把图片获取任务交给线程池去操作。在数据返回后,再将图像赋给ImageView。

代码用到了以下开源库 Android-Universal-Image-Loader:请求,缓存,加载网络图片 jsoup:HTML解析库

效果图:

源码:

manifest 记得加权限=”android.permission.WRITE_EXTERNAL_STORAGE” />主界面LayOut==”match_parent”tools:context=”.MainActivity” ><GridView====>Item的layout==”match_parent”android:layout_height=”wrap_content”><!– 把图片不按比例扩大/缩小到View的大小显示 –><ImageView=”wrap_content”android:scaleType=”fitXY”/></com.example.gridpic.SquareLayout>自定义的一个Layout

用来wrap每一个Item。为了锁定图片为正方形。

package com.example.gridpic;import android.content.Context;import android.util.AttributeSet;import android.widget.RelativeLayout;{public SquareLayout(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}public SquareLayout(Context context, AttributeSet attrs) {super(context, attrs);}public SquareLayout(Context context) {super(context);}@SuppressWarnings(“unused”)(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec));// Children are just made to fill our space.int childWidthSize = getMeasuredWidth();int childHeightSize = getMeasuredHeight();//高度和宽度一样heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY);super.onMeasure(widthMeasureSpec, heightMeasureSpec);};}##自定义的BaseAdapter通过ImageLoader加载每幅图片,如果之前已经有本地缓存了,则从本地直接读取“`javapackage com.example.gridpic;import java.util.List;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.QueueProcessingType;import android.content.Context;import android.graphics.Bitmap;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;{List<String> imageList;protected ImageLoader imageLoader = ImageLoader.getInstance();protected DisplayImageOptions options;private LayoutInflater mInflater;public MyAdapter(Context context,List<String> imageList) {super();this.imageList = imageList;options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_launcher).showImageForEmptyUri(R.drawable.ic_launcher).showImageOnFail(R.drawable.ic_launcher).cacheInMemory(true).cacheOnDisk(true).bitmapConfig(Bitmap.Config.RGB_565).build();this.mInflater = LayoutInflater.from(context);//初始化ImageLoaderImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);config.threadPriority(Thread.NORM_PRIORITY – 2);config.denyCacheImageMultipleSizesInMemory();config.diskCacheFileNameGenerator(new Md5FileNameGenerator());config.diskCacheSize(50 * 1024 * 1024); // 50 MiBconfig.tasksProcessingOrder(QueueProcessingType.LIFO);config.writeDebugLogs(); // Remove for release appImageLoader.getInstance().init(config.build());}() {return imageList.size();}@Overridepublic Object getItem(int arg0) {;}(int arg0) {;}@Overridepublic View getView(int position, View view, ViewGroup viewGroup) {ViewHolder holder = null;if (view == null) {view = mInflater.inflate(R.layout.picitem, null);holder = new ViewHolder();holder.image=(ImageView) view.findViewById(R.id.imageView1);view.setTag(holder);} else {holder = (ViewHolder) view.getTag();}imageLoader.displayImage(imageList.get(position),holder.image, options);Log.e(“whatever”, “Get View:”+position+”. url=”+imageList.get(position));return view;}final class ViewHolder{public ImageView image;}}<div class=”se-preview-section-delimiter”></div>主界面Activity当一个人真正觉悟的一刻,他放弃追寻外在世界的财富,而开始追寻他内心世界的真正财富

chen52671的专栏

相关文章:

你感兴趣的文章:

标签云: