这里有新鲜出炉的精品教程,程序狗速度看过来!
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
这篇文章主要介绍了Android实现从缓存中读取图片与异步加载功能类,涉及Android针对缓存的操作及图片异步加载相关实现技巧,需要的朋友可以参考下
本文实例讲述了Android实现从缓存中读取图片与异步加载功能类。分享给大家供大家参考,具体如下:
在新浪微博的微博列表中的图片,为了加速其显示也为了加快程序的响应,可以参考该图片异步加载类实现。
- public class AsyncImageLoader {
- //SoftReference是软引用,是为了更好的为了系统回收变量
- private HashMap < String,
- SoftReference < Drawable >> imageCache;
- public AsyncImageLoader() {
- imageCache = new HashMap < String,
- SoftReference < Drawable >> ();
- }
- public Drawable loadDrawable(final String imageUrl, final ImageView imageView, final ImageCallback imageCallback) {
- if (imageCache.containsKey(imageUrl)) {
- //从缓存中获取
- SoftReference < Drawable > softReference = imageCache.get(imageUrl);
- Drawable drawable = softReference.get();
- if (drawable != null) {
- return drawable;
- }
- }
- final Handler handler = new Handler() {
- public void handleMessage(Message message) {
- imageCallback.imageLoaded((Drawable) message.obj, imageView, imageUrl);
- }
- };
- //建立新一个新的线程下载图片
- new Thread() {@Override public void run() {
- Drawable drawable = loadImageFromUrl(imageUrl);
- imageCache.put(imageUrl, new SoftReference < Drawable > (drawable));
- Message message = handler.obtainMessage(0, drawable);
- handler.sendMessage(message);
- }
- }.start();
- return null;
- }
- public static Drawable loadImageFromUrl(String url) {
- URL m;
- InputStream i = null;
- try {
- m = new URL(url);
- i = (InputStream) m.getContent();
- } catch(MalformedURLException e1) {
- e1.printStackTrace();
- } catch(IOException e) {
- e.printStackTrace();
- }
- Drawable d = Drawable.createFromStream(i, "src");
- return d;
- }
- //回调接口
- public interface ImageCallback {
- public void imageLoaded(Drawable imageDrawable, ImageView imageView, String imageUrl);
- }
- }
在Adapter中使用的方法为:
- public class WeiBoAdapater extends BaseAdapter{
- private AsyncImageLoader asyncImageLoader;
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return wbList.size();
- }
- @Override
- public Object getItem(int position) {
- // TODO Auto-generated method stub
- return wbList.get(position);
- }
- @Override
- public long getItemId(int position) {
- // TODO Auto-generated method stub
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- // TODO Auto-generated method stub
- convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.weibo, null);
- WeiBoHolder wh = new WeiBoHolder();
- wh.wbicon = (ImageView) convertView.findViewById(R.id.wbicon);
- wh.wbtext = (TextView) convertView.findViewById(R.id.wbtext);
- wh.wbtime = (TextView) convertView.findViewById(R.id.wbtime);
- wh.wbuser = (TextView) convertView.findViewById(R.id.wbuser);
- wh.wbimage=(ImageView) convertView.findViewById(R.id.wbimage);
- WeiBoInfo wb = wbList.get(position);
- if(wb != null)
- {
- convertView.setTag(wb.getId());
- wh.wbuser.setText(wb.getUserName());
- wh.wbtime.setText(wb.getTime());
- wh.wbtext.setText(wb.getText(), TextView.BufferType.SPANNABLE);
- Drawable cachedImage = asyncImageLoader.loadDrawable(wb.getUserIcon(), wh.wbicon, new ImageCallback(){
- public void imageLoaded(Drawable imageDrawable,ImageView imageView,String imageUrl){
- imageView.setImageDrawable(imageDrawable);
- }
- });
- if (cachedImage == null)
- {
- wh.wbicon.setImageResource(R.drawable.usericon);
- }else{
- wh.wbicon.setImageDrawable(cachedImage);
- }
- }
- return convertView;
- }
- }
希望本文所述对大家Android程序设计有所帮助。
来源: http://www.phperz.com/article/17/0918/348290.html