[android] 练习使用ListView(二)
生活随笔
收集整理的這篇文章主要介紹了
[android] 练习使用ListView(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
主要練習異步任務和LruCache緩存
package com.android.test;import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL;import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.util.LruCache; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView;public class MainActivity extends Activity {private ListView lv_images;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv_images = (ListView) findViewById(R.id.lv_images);ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(this);ImageLoader.getInstance().init(configuration);ListAdapter adapter = new ImageAdapter();lv_images.setAdapter(adapter);}/*** 適配器* @author taoshihan**/class ImageAdapter extends BaseAdapter {private LruCache<String, BitmapDrawable> mImageCache;public ImageAdapter() {int maxSize=(int) (Runtime.getRuntime().maxMemory()/8);mImageCache=new LruCache<String, BitmapDrawable>(maxSize){protected int sizeOf(String key, BitmapDrawable drawable) {return drawable.getBitmap().getByteCount(); };};}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {String url=(String) getItem(position);View view;if(convertView!=null){view=convertView;}else{view=View.inflate(getApplicationContext(), R.layout.image_item, null);}ImageView imageView=(ImageView) view.findViewById(R.id.tv_image);BitmapDrawable bitmapDrawable=getBitmapFromMemoryCache(url);if(bitmapDrawable!=null){//讀取緩存圖片 imageView.setImageDrawable(bitmapDrawable);}else{//讀取網絡圖片ImageWorkerTask task=new ImageWorkerTask(imageView);task.execute(url);}return view;}/*** 從緩存中讀取圖片* @param key* @return */public BitmapDrawable getBitmapFromMemoryCache(String key) {if(mImageCache.get(key)!=null){return mImageCache.get(key);}return null;}public void addBitmapToMemoryCache(String key,BitmapDrawable drawable){if(getBitmapFromMemoryCache(key)==null){mImageCache.put(key, drawable);}}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn Images.IMAGE_URLS.length;}@Overridepublic Object getItem(int position) {return Images.IMAGE_URLS[position];}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}/*** 異步任務* @author taoshihan**/class ImageWorkerTask extends AsyncTask<String, Void, BitmapDrawable>{private ImageView imageView;public ImageWorkerTask(ImageView imageView) {this.imageView=imageView;}@Overrideprotected BitmapDrawable doInBackground(String... params) {String imageUrl=params[0];Bitmap bitmap=downLoadBitmap(imageUrl);BitmapDrawable drawable=new BitmapDrawable(getApplicationContext().getResources(),bitmap);addBitmapToMemoryCache(imageUrl, drawable);return drawable;}//下載圖片private Bitmap downLoadBitmap(String imageUrl) {Bitmap bitmap=null;try {URL url=new URL(imageUrl);HttpURLConnection conn=(HttpURLConnection) url.openConnection();conn.setConnectTimeout(10000);InputStream is=conn.getInputStream();bitmap=BitmapFactory.decodeStream(is);} catch (Exception e) {}return bitmap;}//下載完成的 @Overrideprotected void onPostExecute(BitmapDrawable result) {if(imageView!=null&&result!=null){imageView.setImageDrawable(result);}}}}static class Images{public final static String[] IMAGE_URLS = new String[]{"https://img-my.csdn.net/uploads/201508/05/1438760758_3497.jpg", "https://img-my.csdn.net/uploads/201508/05/1438760758_6667.jpg", "https://img-my.csdn.net/uploads/201508/05/1438760757_3588.jpg", "https://img-my.csdn.net/uploads/201508/05/1438760756_3304.jpg", "https://img-my.csdn.net/uploads/201508/05/1438760755_6715.jpeg", "https://img-my.csdn.net/uploads/201508/05/1438760726_5120.jpg", "https://img-my.csdn.net/uploads/201508/05/1438760726_8364.jpg", "https://img-my.csdn.net/uploads/201508/05/1438760725_4031.jpg", "https://img-my.csdn.net/uploads/201508/05/1438760724_9463.jpg", "https://img-my.csdn.net/uploads/201508/05/1438760724_2371.jpg", "https://img-my.csdn.net/uploads/201508/05/1438760707_4653.jpg"};} }?
總結
以上是生活随笔為你收集整理的[android] 练习使用ListView(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Canvas 画占比图 解决canva
- 下一篇: 玩转Redis集群(下)