1 package com.lixu.listviewrefresh; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.Random; 6 7 import com. ...
1 package com.lixu.listviewrefresh; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.Random; 6 7 import com.lixu.listviewrefresh.Loadnetimage.OnLoadnetimageListener; 8 import com.lixu.listviewrefresh.MyRefreshListview.OnRefreshListener; 9 import android.annotation.SuppressLint; 10 import android.app.Activity; 11 import android.app.ProgressDialog; 12 import android.content.Context; 13 import android.graphics.Bitmap; 14 import android.graphics.BitmapFactory; 15 import android.os.AsyncTask; 16 import android.os.Bundle; 17 import android.util.Log; 18 import android.view.LayoutInflater; 19 import android.view.View; 20 import android.view.ViewGroup; 21 import android.widget.ArrayAdapter; 22 import android.widget.ImageView; 23 import android.widget.ListView; 24 import android.widget.TextView; 25 26 public class MainActivity extends Activity { 27 private static final String KEY_IMAGE = "image_key"; 28 private static final String KEY_TEXT = "text_key"; 29 30 private static final String CACHE_KEY_IMAGE = "cache_image_key"; 31 private static final String CACHE_KEY_TEXT = "cache_text_key"; 32 // 原始数据 33 private ArrayList<HashMap<String, Object>> data; 34 // 缓存队列 35 private ArrayList<HashMap<String, Object>> cache; 36 37 private ArrayAdapter<String> mMyAdapter; 38 39 private MyRefreshListview lv; 40 41 private Activity activity; 42 private Random random = new Random(); 43 // 图片网络地址 44 private String[] image_urls = { "http://img0.bdstatic.com/img/image/shouye/mxh007.jpg", 45 "http://f.hiphotos.baidu.com/image/h%3D360/sign=1c9a50843ec79f3d90e1e2368aa0cdbc/f636afc379310a5566becb8fb24543a982261036.jpg", 46 "http://h.hiphotos.baidu.com/image/h%3D360/sign=04ef437b0b23dd543e73a16ee108b3df/50da81cb39dbb6fd9d9ada390b24ab18962b37ef.jpg", 47 "http://b.hiphotos.baidu.com/image/h%3D360/sign=e91921f7c1fdfc03fa78e5bee43e87a9/8b82b9014a90f60352684b4e3b12b31bb151eddb.jpg", 48 "http://g.hiphotos.baidu.com/image/h%3D360/sign=a2540bdbf21f3a2945c8d3c8a925bce3/fd039245d688d43fa9943bf77f1ed21b0ef43bf1.jpg", 49 "http://p4.so.qhimg.com/bdr/_240_/t01d4c378e7c6bfbe69.jpg", 50 "http://p0.so.qhimg.com/bdr/_240_/t0160872a7d33df5735.jpg", 51 "http://p3.so.qhimg.com/bdr/_240_/t01473a131702c357dd.jpg" }; 52 53 @Override 54 protected void onCreate(Bundle savedInstanceState) { 55 super.onCreate(savedInstanceState); 56 setContentView(R.layout.activity_main); 57 58 activity = this; 59 60 data = new ArrayList<HashMap<String, Object>>(); 61 cache = new ArrayList<HashMap<String, Object>>(); 62 // 添加初始数据 63 for (int i = 0; i < 30; i++) { 64 HashMap<String, Object> map = new HashMap<String, Object>(); 65 map.put(KEY_IMAGE, BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)); 66 map.put(KEY_TEXT, i); 67 data.add(map); 68 } 69 70 lv = (MyRefreshListview) findViewById(R.id.listview); 71 72 mMyAdapter = new MyAdapter(this, -1); 73 74 lv.setAdapter(mMyAdapter); 75 76 lv.setOnRefreshListener(new OnRefreshListener() { 77 78 @Override 79 public void ontop() { 80 // 随机加入一张图片 81 adddata(image_urls[random.nextInt(8)]); 82 83 } 84 85 @Override 86 public void onbuttom() { 87 // 没有设置缓存机制 88 new MyAsyncTaskBottom(image_urls[random.nextInt(8)]).execute(); 89 } 90 }); 91 } 92 93 private class MyAdapter extends ArrayAdapter<String> { 94 private LayoutInflater flater; 95 private Context context; 96 97 public MyAdapter(Context context, int resource) { 98 99 super(context, resource);100 this.context = context;101 flater = LayoutInflater.from(context);102 103 }104 105 @Override106 public int getCount() {107 return data.size();108 }109 110 @SuppressLint("InflateParams")111 @Override112 public View getView(int position, View convertView, ViewGroup parent) {113 114 if (convertView == null)115 convertView = flater.inflate(R.layout.list, null);116 117 ImageView iv = (ImageView) convertView.findViewById(R.id.image);118 119 iv.setImageBitmap((Bitmap) data.get(position).get(KEY_IMAGE));120 121 TextView tv = (TextView) convertView.findViewById(R.id.text);122 123 tv.setText(position + "原始数据");124 125 return convertView;126 }127 128 }129 130 private class MyAsyncTaskTop extends AsyncTask {131 private ProgressDialog pd;132 @SuppressWarnings("unused")133 private String url;134 135 public MyAsyncTaskTop(String url) {136 this.url = url;137 }138 139 @Override140 protected void onPreExecute() {141 // 设置加载进度条142 pd = new ProgressDialog(activity);143 pd.setProgressStyle(pd.STYLE_HORIZONTAL);144 pd.setMessage("正在加载。。。");145 pd.show();146 }147 148 @Override149 protected Object doInBackground(Object... params) {150 151 try {152 // 回调加载网络的类Loadnetimage153 Loadnetimage mLoadnetimage = new Loadnetimage();154 155 mLoadnetimage.SetLoadnetimageListener(new OnLoadnetimageListener() {156 157 @SuppressWarnings("unchecked")158 @Override159 public void LoadnetimageListener(int count, int total) {160 publishProgress(count, total);161 162 }163 });164 // 获取网络图片165 Bitmap bitmap = mLoadnetimage.loadRawDataFromURL(url);166 // 每次将图片和对应的地址放入HashMap167 HashMap<String, Object> map = new HashMap<String, Object>();168 // 将新加载图片放入缓存169 map.put(CACHE_KEY_IMAGE, bitmap);170 map.put(CACHE_KEY_TEXT, url);171 172 cache.add(map);173 174 return bitmap;175 } catch (Exception e) {176 e.printStackTrace();177 }178 179 return null;180 181 }182 183 @Override184 protected void onPostExecute(Object result) {185 addtop(result);186 pd.dismiss();187 188 }189 190 // 更新进度条191 @Override192 protected void onProgressUpdate(Object... values) {193 int count = (Integer) values[0];194 int total = (Integer) values[1];195 196 pd.setMax(total);197 pd.setProgress(count);198 199 }200 201 }202 203 @SuppressWarnings("unused")204 private class MyAsyncTaskBottom extends AsyncTask {205 private ProgressDialog pd;206 private String url;207 208 public MyAsyncTaskBottom(String url) {209 this.url = url;210 }211 212 @Override213 protected void onPreExecute() {214 // 设置进度条215 pd = new ProgressDialog(activity);216 // 样式217 pd.setProgressStyle(pd.STYLE_HORIZONTAL);218 pd.setMessage("正在加载。。。");219 pd.show();220 221 }222 223 @Override224 protected Object doInBackground(Object... params) {225 // 回调加载网络的类Loadnetimage226 Loadnetimage mLoadnetimage = new Loadnetimage();227 // 获取网络图片228 Bitmap bitmap;229 try {230 bitmap = mLoadnetimage.loadRawDataFromURL(url);231 return bitmap;232 } catch (Exception e) {233 e.printStackTrace();234 }235 return null;236 }237 238 @Override239 protected void onPostExecute(Object result) {240 addbottom(result);241 pd.dismiss();242 243 }244 245 }246 247 private void adddata(String url) {248 // 设置缓存机制249 Log.e("", "开始添加");250 251 for (int i = 0; i < cache.size(); i++) {252 253 HashMap<String, Object> map = cache.get(i);254 // 判断图片地址一样则载入缓存255 if (url.equals(map.get(CACHE_KEY_TEXT))) {256 Bitmap bitmap = (Bitmap) map.get(CACHE_KEY_IMAGE);257 addtop(bitmap);258 Log.e("", "载入缓存");259 260 return;261 }262 263 }264 // 否则从网络新加载265 Log.e("", "最新加载");266 new MyAsyncTaskTop(url).execute();267 268 }269 270 private void addtop(Object result) {271 272 // 新加载图片放入原始数据273 HashMap<String, Object> map = new HashMap<String, Object>();274 map.put(KEY_IMAGE, result);275 map.put(KEY_TEXT, data.size() + 1);276 277 data.add(0, map);278 279 mMyAdapter.notifyDataSetChanged();280 }281 282 private void addbottom(Object result) {283 HashMap<String, Object> map = new HashMap<String, Object>();284 map.put(KEY_IMAGE, result);285 map.put(KEY_TEXT, data.size() + 1);286 287 data.add(map);288 289 mMyAdapter.notifyDataSetChanged();290 // 添加数据后自动滚动到底部291 lv.setSelection(ListView.FOCUS_DOWN);292 293 }294 295 }
原标题:自己定制ListView,上拉刷新和下拉刷新,加载网络图片,并且添加缓存机制。
关键词:网络
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。