【1】异步加载图片类AsyncImageLoader

packagecom.example.testdddleapk.cus;importjava.io.IOException;importjava.lang.ref.SoftReference;importjava.util.HashMap;importorg.apache.http.HttpEntity;importorg.apache.http.HttpResponse;importorg.apache.http.HttpStatus;importorg.apache.http.client.ClientProtocolException;importorg.apache.http.client.HttpClient;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.impl.client.DefaultHttpClient;importorg.apache.http.params.CoreConnectionPNames;importandroid.graphics.drawable.Drawable;importandroid.os.Handler;importandroid.os.Message;/***异步加载图片*/publicclassAsyncImageLoader{//软引用,使用内存做临时缓存(程序退出,或内存不够则清除软引用)privateHashMap<String,SoftReference<Drawable>>p_w_picpathCache;publicAsyncImageLoader(){p_w_picpathCache=newHashMap<String,SoftReference<Drawable>>();}/***定义回调接口*/publicinterfaceImageCallback{publicvoidp_w_picpathLoaded(Drawablep_w_picpathDrawable,Stringp_w_picpathUrl);}/***创建子线程加载图片*子线程加载完图片交给handler处理(子线程不能更新ui,而handler处在主线程,可以更新ui)*handler又交给p_w_picpathCallback,p_w_picpathCallback须要自己来实现,在这里可以对回调参数进行处理*@paramp_w_picpathUrl:须要加载的图片url*@paramp_w_picpathCallback:*@return*/publicDrawableloadDrawable(finalStringp_w_picpathUrl,finalImageCallbackp_w_picpathCallback){//如果缓存中存在图片,则首先使用缓存if(p_w_picpathCache.containsKey(p_w_picpathUrl)){SoftReference<Drawable>softReference=p_w_picpathCache.get(p_w_picpathUrl);Drawabledrawable=softReference.get();if(drawable!=null){System.out.println("loadDrawable");p_w_picpathCallback.p_w_picpathLoaded(drawable,p_w_picpathUrl);//执行回调returndrawable;}}/***在主线程里执行回调,更新视图*/finalHandlerhandler=newHandler(){publicvoidhandleMessage(Messagemessage){System.out.println("handleMessage");p_w_picpathCallback.p_w_picpathLoaded((Drawable)message.obj,p_w_picpathUrl);}};/***创建子线程访问网络并加载图片,把结果交给handler处理*/newThread(){@Overridepublicvoidrun(){Drawabledrawable=loadImageFromUrl(p_w_picpathUrl);//下载完的图片放到缓存里p_w_picpathCache.put(p_w_picpathUrl,newSoftReference<Drawable>(drawable));Messagemessage=handler.obtainMessage(0,drawable);handler.sendMessage(message);}}.start();returnnull;}/***下载图片(注意HttpClient和httpUrlConnection的区别)*/publicDrawableloadImageFromUrl(Stringurl){try{HttpClientclient=newDefaultHttpClient();client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,1000*15);HttpGetget=newHttpGet(url);HttpResponseresponse;response=client.execute(get);if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){HttpEntityentity=response.getEntity();Drawabled=Drawable.createFromStream(entity.getContent(),"src");returnd;}else{returnnull;}}catch(ClientProtocolExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}returnnull;}//清除缓存publicvoidclearCache(){if(this.p_w_picpathCache.size()>0){this.p_w_picpathCache.clear();}}}

【2】 pagerAdapter的instantiateItem方法

@SuppressLint("NewApi")@OverridepublicObjectinstantiateItem(finalViewGroupcontainer,finalintposition){Stringurl=imgsUrls[position];DrawablecachedImage=asyncImageLoader.loadDrawable(url,newImageCallback(){@SuppressLint("NewApi")publicvoidp_w_picpathLoaded(Drawablep_w_picpathDrawable,Stringp_w_picpathUrl){ImageViewimg=(ImageView)viewList.get(position).findViewById(R.id.img);img.setBackground(p_w_picpathDrawable);container.addView(view);}});returnviewList.get(position);}