Android實現(xiàn)從緩存中讀取圖片與異步加載功能類
本文實例講述了Android實現(xiàn)從緩存中讀取圖片與異步加載功能類。分享給大家供大家參考,具體如下:
在新浪微博的微博列表中的圖片,為了加速其顯示也為了加快程序的響應,可以參考該圖片異步加載類實現(xiàn)。
public class AsyncImageLoader { //SoftReference是軟引用,是為了更好的為了系統(tǒng)回收變量 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; } //回調(diào)接口 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相關內(nèi)容感興趣的讀者可查看本站專題:《Android控件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android文件操作技巧匯總》、《Android操作SQLite數(shù)據(jù)庫技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android數(shù)據(jù)庫操作技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android編程開發(fā)之SD卡操作方法匯總》、《Android開發(fā)入門與進階教程》及《Android資源操作技巧匯總》
希望本文所述對大家Android程序設計有所幫助。
相關文章
Android?MaterialButton使用實例詳解(告別shape、selector)
我們平時寫布局,當遇到按鈕需要圓角、或者描邊等,通常的方法是新建一個xml文件,在shape標簽下寫,然后通過android:background或setBackground(drawable)設置,這篇文章主要給大家介紹了關于Android?MaterialButton使用詳解的相關資料,需要的朋友可以參考下2022-09-09Android自定義View實現(xiàn)圓環(huán)交替效果
這篇文章給大家介紹如何基于Android自定義View實現(xiàn)圓環(huán)交替的效果,實現(xiàn)后效果很贊,有需要的小伙伴們可以參考借鑒。2016-08-08flutter實現(xiàn)帶刪除動畫的listview功能
最近接了一個新項目,需要開發(fā)帶有刪除動畫效果的listview功能,在實現(xiàn)過程中列表滾動效果用listview實現(xiàn)的,本文通過實例代碼給大家分享實現(xiàn)過程,感興趣的朋友跟隨小編一起學習下吧2021-05-05View中如何進行手勢識別onFling動作實現(xiàn)介紹
下面我們就以實現(xiàn)手勢識別的onFling動作,在CwjView中我們從View類繼承,當然大家可以從TextView等更高層的界面中實現(xiàn)觸控,感興趣的朋友可以了解下哈2013-06-06