[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(二)相关推荐
- Android项目实战(二十):浅谈ListView悬浮头部展现效果
Android项目实战(二十):浅谈ListView悬浮头部展现效果 原文:Android项目实战(二十):浅谈ListView悬浮头部展现效果 先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数 ...
- android 应用之listview添加radiobutton,获取textView
程序效果: 点击一整行,更换radiobutton选择. xml代码: [java] view plaincopy <?xml version="1.0" encoding= ...
- Android Contextual Menus之二:contextual action mode
Android Contextual Menus之二:contextual action mode 接上文:Android Contextual Menus之一:floating context me ...
- (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例
Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21 我要评论 这篇文章主要介绍了Android项 ...
- Android学习笔记ListView
在手机实际应用中,我们常常需要列表来显示我们的信息,比如我们的联系人列表,短信信息列表等.在Android中通过ListView来实现. ListView 的XML属性 属性名称 描述 android ...
- Android 动态计算ListView的高度
目录 一.简介 二.效果图 三.代码实现 一.简介 在Android开发的过程中有的时候我们需要手动计算ListView的高度,比如说,ScrollView中嵌套ListView的时候,我们就需要手动 ...
- Android图表库MPAndroidChart(二)——线形图的方方面面,看完你会回来感谢我的
Android图表库MPAndroidChart(二)--线形图的方方面面,看完你会回来感谢我的 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...
- Android ToolBar and Listview
1 不是讲理论的,就是遇到很多奇怪的问题: 没事做,决定自己仿个个魅族便签玩玩,体验一把开发app的过程: 如何加入标题栏,我还是比较喜欢称之为标题栏,我也没弄明白actionbar 和toolbar ...
- Android实现网络下载二(多任务下载--支持断点续传)
Android实现网络下载二(多任务下载–支持断点续传) 上文中说了单任务的断点续传,这篇文章就说说多任务下载,不啰嗦了,直接进入正题. 附上demo源码,GitHub代码后续上传,这里的链接还是cs ...
- android 中自定义安装,Android开发中ListView自定义adapter的封装
[引入] 我们一般编写listView的时候顺序是这样的: •需要展示的数据集List •为这个数据集编写一个ListView •为这个ListView编写一个Adapter,一般继承自BaseAda ...
最新文章
- SDCC 2016 中国软件开发者大会盛大开幕
- 变频电源外围配置的全面要点
- 华为防火墙查看日志命令_防火墙接入互联网方式,到底有哪些呢?5分钟学会防火墙入网...
- VTK:绘图线3D用法实战
- JavaScript实现链表reverseTraversal反向遍历算法(附完整源码)
- Rete之外的生活– RIP Rete 2013 :)
- web开发软件,8个优秀的CSS实践,附面试题
- [系列][编译原理]正则表达式
- android应用版本更新功能---完整版
- spring boot 初始化表
- 数据结构之栈与队列(二)
- linux查看磁盘io性能
- MySQL主从同步的多种模式
- (八) 一起学 Unix 环境高级编程 (APUE) 之 信号
- Java 基本数据类型(四类八种)
- 海外 Android 三方应用市场
- oracle 命令 执行job_Oracle中job的使用详解
- arcgis lisence manager 无法启动
- AMD的复兴之路 发力ARM服务器芯片
- 2022-2027年中国煤制尿素行业市场全景评估及发展战略规划报告
热门文章
- MS提供的Oracle for ADO 驱动,在一个应用中不能打开同时多个数据库连接
- Google的电话面试
- 电脑的引导启动快捷键
- keras保存模型_TF2 8.模型保存与加载
- java web 不用框架_MyShop-不用框架的基础javaweb项目
- python对平面设计帮助_平面设计工作心得
- 单峰数组找最大元素C语言,查找单峰数组中的第k个元素
- 2022年中国开源软件产业研究报告
- 2021中国成人教育市场及用户洞察报告
- 互联网日报 | 6月19日 星期六 | 京东618累计下单金额超3438亿元;爱回收正式登陆纽交所;欧洲杯官方小程序上线支付宝...