主要练习异步任务和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(二)相关推荐

  1. Android项目实战(二十):浅谈ListView悬浮头部展现效果

    Android项目实战(二十):浅谈ListView悬浮头部展现效果 原文:Android项目实战(二十):浅谈ListView悬浮头部展现效果 先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数 ...

  2. android 应用之listview添加radiobutton,获取textView

    程序效果: 点击一整行,更换radiobutton选择. xml代码: [java] view plaincopy <?xml version="1.0" encoding= ...

  3. Android Contextual Menus之二:contextual action mode

    Android Contextual Menus之二:contextual action mode 接上文:Android Contextual Menus之一:floating context me ...

  4. (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例

    Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21 我要评论 这篇文章主要介绍了Android项 ...

  5. Android学习笔记ListView

    在手机实际应用中,我们常常需要列表来显示我们的信息,比如我们的联系人列表,短信信息列表等.在Android中通过ListView来实现. ListView 的XML属性 属性名称 描述 android ...

  6. Android 动态计算ListView的高度

    目录 一.简介 二.效果图 三.代码实现 一.简介 在Android开发的过程中有的时候我们需要手动计算ListView的高度,比如说,ScrollView中嵌套ListView的时候,我们就需要手动 ...

  7. Android图表库MPAndroidChart(二)——线形图的方方面面,看完你会回来感谢我的

    Android图表库MPAndroidChart(二)--线形图的方方面面,看完你会回来感谢我的 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...

  8. Android ToolBar and Listview

    1 不是讲理论的,就是遇到很多奇怪的问题: 没事做,决定自己仿个个魅族便签玩玩,体验一把开发app的过程: 如何加入标题栏,我还是比较喜欢称之为标题栏,我也没弄明白actionbar 和toolbar ...

  9. Android实现网络下载二(多任务下载--支持断点续传)

    Android实现网络下载二(多任务下载–支持断点续传) 上文中说了单任务的断点续传,这篇文章就说说多任务下载,不啰嗦了,直接进入正题. 附上demo源码,GitHub代码后续上传,这里的链接还是cs ...

  10. android 中自定义安装,Android开发中ListView自定义adapter的封装

    [引入] 我们一般编写listView的时候顺序是这样的: •需要展示的数据集List •为这个数据集编写一个ListView •为这个ListView编写一个Adapter,一般继承自BaseAda ...

最新文章

  1. SDCC 2016 中国软件开发者大会盛大开幕
  2. 变频电源外围配置的全面要点
  3. 华为防火墙查看日志命令_防火墙接入互联网方式,到底有哪些呢?5分钟学会防火墙入网...
  4. VTK:绘图线3D用法实战
  5. JavaScript实现链表reverseTraversal反向遍历算法(附完整源码)
  6. Rete之外的生活– RIP Rete 2013 :)
  7. web开发软件,8个优秀的CSS实践,附面试题
  8. [系列][编译原理]正则表达式
  9. android应用版本更新功能---完整版
  10. spring boot 初始化表
  11. 数据结构之栈与队列(二)
  12. linux查看磁盘io性能
  13. MySQL主从同步的多种模式
  14. (八) 一起学 Unix 环境高级编程 (APUE) 之 信号
  15. Java 基本数据类型(四类八种)
  16. 海外 Android 三方应用市场
  17. oracle 命令 执行job_Oracle中job的使用详解
  18. arcgis lisence manager 无法启动
  19. AMD的复兴之路 发力ARM服务器芯片
  20. 2022-2027年中国煤制尿素行业市场全景评估及发展战略规划报告

热门文章

  1. MS提供的Oracle for ADO 驱动,在一个应用中不能打开同时多个数据库连接
  2. Google的电话面试
  3. 电脑的引导启动快捷键
  4. keras保存模型_TF2 8.模型保存与加载
  5. java web 不用框架_MyShop-不用框架的基础javaweb项目
  6. python对平面设计帮助_平面设计工作心得
  7. 单峰数组找最大元素C语言,查找单峰数组中的第k个元素
  8. 2022年中国开源软件产业研究报告
  9. 2021中国成人教育市场及用户洞察报告
  10. 互联网日报 | 6月19日 星期六 | 京东618累计下单金额超3438亿元;爱回收正式登陆纽交所;欧洲杯官方小程序上线支付宝...