当前位置: 首页 > news >正文

网站建设准备资料/seo点石论坛

网站建设准备资料,seo点石论坛,设计邦,网站建设项目规划书社团宣传文件缓存 文件缓存(把图片存入文件中) 向文件中存: void BitmapUtils.save(bitmap,file){}从文件中取: Bitmap BitmapUtils.loadBitmap(File file){}BitmapUtils增加如下方法 /*** 用jpeg格式存储bitmap** param bitmap* param…

文件缓存

文件缓存(把图片存入文件中)
向文件中存:

void BitmapUtils.save(bitmap,file){}

从文件中取:

Bitmap BitmapUtils.loadBitmap(File file){}

BitmapUtils增加如下方法

    /*** 用jpeg格式存储bitmap** @param bitmap* @param file*/public static void save(Bitmap bitmap, File file) throws IOException {if (!file.getParentFile().exists()) {//父目录不存在file.getParentFile().mkdirs();}FileOutputStream fos = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);}/*** 从文件中加载一个Bitmap** @param file* @return*/public static Bitmap bitmap(File file) {if (!file.exists()) {return null;}Bitmap b = BitmapFactory.decodeFile(file.getAbsolutePath());return b;}

MusicAdapter修改如下

/*** 音乐列表适配器*/
public class MusicAdapter extends BaseAdapter {......private ListView listView;private HashMap<String,SoftReference<Bitmap>> cache = new HashMap<>();....../*** 通过url地址 发送http请求 获取图片* @param url* @return*/private Bitmap loadBitmap(String url){try {InputStream is = HttpUtils.getInputStream(url);//执行压缩算法,获取合适尺寸的图片Bitmap bitmap = BitmapUtils.loadBitmap(is,50,50);//Bitmap bitmap = BitmapFactory.decodeStream(is);//把bitmap放入内存缓存cache.put(url,new SoftReference<Bitmap>(bitmap));//把bitmap存入文件中//data/data/包名/cache文件夹 内部存储的缓存目录String fileName = url.substring(url.lastIndexOf("/")+1);Log.d("IMAGES",fileName);File file = new File(context.getCacheDir(),"images/"+fileName);BitmapUtils.save(bitmap,file);return bitmap;} catch (IOException e) {e.printStackTrace();}return null;}......@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {ViewHolder holder = null;......//图片在服务器,本来该起线程显示的,但是,这是adapter.getView()方法//每次图片显示时,都要启线程的话,手机会炸的...//给holder.imgPic设置图片//先去内存缓存中看有没有SoftReference<Bitmap> ref = cache.get(music.getPic_small());if(ref!=null){//以前存过Bitmap bitmap = ref.get();if(bitmap!=null){//以前存的还没有被清掉holder.imgPic.setImageBitmap(bitmap);return view;}}//去文件缓存中读取String url = music.getPic_small();String fileName = url.substring(url.lastIndexOf("/")+1);File file = new File(context.getCacheDir(),"images/"+fileName);Bitmap bitmap = BitmapUtils.bitmap(file);if(bitmap!=null){//一旦从文件中读取出来,先存入内存缓存//内存是最快的cache.put(url,new SoftReference<Bitmap>(bitmap));holder.imgPic.setImageBitmap(bitmap);return view;}//向任务集合中一个图片下载任务......return view;}......
}

查看data/data/包名/cache可以看到下载的图片
在这里插入图片描述

封装

新增图片加载类 ImageLoader

/*** 异步批量加载图片的工具类*/
public class ImageLoader {private HashMap<String, SoftReference<Bitmap>> cache = new HashMap<>();private Context context;private List<ImageLoaderTask> tasks = new ArrayList<ImageLoaderTask>();private Thread workThread;private boolean isLoop = true;private ListView listView;private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case HANDLER_IMAGE_LOAD_SUCCESS://给相应的Imageview设置bitmapImageLoaderTask task = (ImageLoaderTask) msg.obj;Bitmap bitmap = task.bitmap;ImageView imageView = (ImageView) listView.findViewWithTag(task.path);if (imageView != null) {if (bitmap != null) {imageView.setImageBitmap(bitmap);} else {imageView.setImageResource(R.mipmap.ic_launcher);}}break;}}};public static final int HANDLER_IMAGE_LOAD_SUCCESS = 1;public ImageLoader(Context context, ListView listView) {this.context = context;this.listView = listView;//启动工作线程,轮循任务集合//匿名内部类持有外部类对象引用//在匿名内部类中可以使用MusicAdapter.thisworkThread = new Thread() {@Overridepublic void run() {while (isLoop) {if (!tasks.isEmpty()) {//不是空集合ImageLoaderTask task = tasks.remove(0);//remove的同时返回该数据String url = task.path;//发送http请求 下载图片Bitmap bitmap = loadBitmap(url);task.bitmap = bitmap;//更新界面 发消息给HandlerMessage message = new Message();message.what = HANDLER_IMAGE_LOAD_SUCCESS;message.obj = task;handler.sendMessage(message);} else {//空集合 等待try {//锁synchronized (workThread) {workThread.wait();}} catch (InterruptedException e) {e.printStackTrace();}}}}};workThread.start();}public void stopThread() {//isLoop为false,循环停止isLoop = false;//当我们按返回键时,线程在wait(),应先唤醒synchronized (workThread) {workThread.notify();}}public void displayImage(String url, ImageView imageView) {//先去内存缓存中看有没有SoftReference<Bitmap> ref = cache.get(url);if (ref != null) {//以前存过Bitmap bitmap = ref.get();if (bitmap != null) {//以前存的还没有被清掉imageView.setImageBitmap(bitmap);return;}}//去文件缓存中读取String fileName = url.substring(url.lastIndexOf("/") + 1);File file = new File(context.getCacheDir(), "images/" + fileName);Bitmap bitmap = BitmapUtils.bitmap(file);if (bitmap != null) {//一旦从文件中读取出来,先存入内存缓存//内存是最快的cache.put(url, new SoftReference<Bitmap>(bitmap));imageView.setImageBitmap(bitmap);return;}//向任务集合中一个图片下载任务imageView.setTag(url);ImageLoaderTask task = new ImageLoaderTask();task.path = url;tasks.add(task);//唤醒工作线程,起来干活synchronized (workThread) {workThread.notify();}}class ImageLoaderTask {String path;//保存图片下载路径Bitmap bitmap;//下载成功后的图片}/*** 通过url地址 发送http请求 获取图片** @param url* @return*/private Bitmap loadBitmap(String url) {try {InputStream is = HttpUtils.getInputStream(url);//执行压缩算法,获取合适尺寸的图片Bitmap bitmap = BitmapUtils.loadBitmap(is, 50, 50);//Bitmap bitmap = BitmapFactory.decodeStream(is);//把bitmap放入内存缓存cache.put(url, new SoftReference<Bitmap>(bitmap));//把bitmap存入文件中//data/data/包名/cache文件夹 内部存储的缓存目录String fileName = url.substring(url.lastIndexOf("/") + 1);Log.d("IMAGES", fileName);File file = new File(context.getCacheDir(), "images/" + fileName);BitmapUtils.save(bitmap, file);return bitmap;} catch (IOException e) {e.printStackTrace();}return null;}
}

MusicAdapter 可以修改为

/*** 音乐列表适配器*/
public class MusicAdapter extends BaseAdapter {private Context context;private List<MusicItem> musics;private LayoutInflater inflater;private ImageLoader imageLoader;public MusicAdapter(Context context, List<MusicItem> musics, ListView listView) {super(context, musics);this.context = context;this.musics = musics;this.inflater = LayoutInflater.from(context);this.imageLoader = new ImageLoader(context, listView);}@Overridepublic int getCount() {return musics.size();}@Overridepublic MusicItem getItem(int i) {return musics.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {ViewHolder holder = null;if (view == null) {view = inflater.inflate(R.layout.item_lv_music, null);holder = new ViewHolder();holder.imgPic = view.findViewById(R.id.img_Pic);holder.tvName = view.findViewById(R.id.tv_name);holder.tvAlbum = view.findViewById(R.id.tv_album);view.setTag(holder);}holder = (ViewHolder) view.getTag();//给控件赋值MusicItem music = getItem(i);holder.tvName.setText(music.name);holder.tvAlbum.setText(music.albumName);//图片在服务器,本来该起线程显示的,但是,这是adapter.getView()方法//每次图片显示时,都要启线程的话,手机会炸的...//给holder.imgPic设置图片imageLoader.displayImage(music.albumPic, holder.imgPic);return view;}public void stopThread() {imageLoader.stopThread();}class ViewHolder {ImageView imgPic;TextView tvName;TextView tvAlbum;}
}
http://www.jmfq.cn/news/5300029.html

相关文章:

  • 凡科商城怎么收费/韶关网站seo
  • 怎么制作个人求职网站/竞价排名
  • 山东网站制作/创意设计
  • 固镇网站建设哪家好/搜索引擎推广渠道
  • 二维码制作网站链接/网络营销师工作内容
  • 做2手车网站需要多少钱/经营管理培训课程
  • 2016网站备案/中国国家人事人才培训网
  • 网站建设与运营的市场/电商线上推广
  • 具有品牌的上海网站建设/竞价推广怎么做
  • 网站提速怎么做/seo优化技术招聘
  • 做网站的公司那家好。/搜外网友情链接
  • 武汉网络科技公司排名/云南网站建设快速优化
  • 琼海做网站口碑/sem托管公司
  • 鸡西百姓网免费发布信息网/如何利用seo赚钱
  • 河南省示范校建设专题网站/百度关键词推广可以自己做吗
  • 网站开发服务合同范本/哈尔滨seo网站管理
  • 免费自学平面设计的网站/网页游戏
  • 画册设计免费模板/seo流量工具
  • 广州优化网站推广/淘宝交易指数换算工具
  • 如何做网络推广员/广东百度seo
  • 做网站推销手表/做优化的网站
  • 重庆网站房地产/seo知识总结
  • 广告设计公司专业vi设计公司/seo网络贸易网站推广
  • 广州荔湾网站建设/软文推广案例
  • 外贸网站建设 福田/百度搜索引擎关键词
  • 河间做网站价格/今天刚刚发生的重大新闻
  • 佛山网站优化质量好/网络营销案例具体分析
  • 网站建设好的/国内新闻最近新闻今天
  • 网站建设合作合同/苏州seo按天扣费
  • 网站设计做图工具/外包网络推广公司