所谓图片异步加载,意思是不用一次把图片全部加载完,你可以叫它延迟加载,缓冲加载都行。

看看你有没有这种需求:某篇文章图片很多,如果在载入文章时就载入所有图片,无疑会延缓载入速度,让用户等更久,所以,我想找这样一种插件,让网页只加载浏览器视野范围内的图片,没出现在范围内的图片就暂不加载,等用户滑动滚动条时再逐步加载。lazyload就是用来实现这种效果。

package com.example.demo1;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;import EntityBen.GoodsItem;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;public class MyAdapter extends BaseAdapter {Context context ;ArrayList<GoodsItem> list ;int index ;public MyAdapter(Context con, ArrayList<GoodsItem> list) {super();this.context = con;this.list = list;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubindex =    position ;View view = convertView ;ViewHolder vH;if(view == null){System.out.println("dddddddddd"+context);LayoutInflater inflater = LayoutInflater.from(context);view = inflater.inflate(R.layout.tuangou_lv, null);vH = new ViewHolder();vH.name = (TextView) view.findViewById(R.id.goods_name);vH.info = (TextView) view.findViewById(R.id.goods_infor);vH.costPrice = (TextView) view.findViewById(R.id.cost_price);vH.oriPrice = (TextView) view.findViewById(R.id.ori_price);vH.moods = (TextView) view.findViewById(R.id.moods);vH.imgtask = (ImageView) view.findViewById(R.id.goods_img);view.setTag(vH);}elsevH = (ViewHolder) view.getTag();vH.name.setText(list.get(position).getName());vH.info.setText(list.get(position).getInfo());vH.costPrice.setText(list.get(position).getCostprice() + "");vH.oriPrice.setText(list.get(position).getOriprice() + "");vH.moods.setText(list.get(position).getMoods() + "人");//当前行的图片路径 例如:http://192.168.0.148:9999/Music/aaa.jpgString fileurl = list.get(position).getImageUrl();//文件操作类实例化FileUtils f = new FileUtils();//通过字符串操作获得当前的图片名称 ( aaa.jpg)String fileName = fileurl.substring(fileurl.lastIndexOf("/") + 1);// /mnt/sdcard/tt/aaa.jpgString filePath = f.GetSDPATH() + "tt/"+fileName;//验证当前图片是否已经存在 /mnt/sdcard/tt/ 中if(f.IsFileExists("tt/"+fileName)){//如果存在vH.imgtask.setImageBitmap(BitmapFactory.decodeFile(filePath));}else{//如果不存在vH.downloadImage=new DownLoadImage(vH.imgtask);vH.downloadImage.execute(list.get(position).getImageUrl());}return view;}public static class ViewHolder{private DownLoadImage downloadImage ;private ImageView  imgtask;private TextView name , info , costPrice ,oriPrice , moods;}private class  DownLoadImage extends AsyncTask<String, Void, Bitmap>{Bitmap drawable;ImageView imageView;DownLoadImage (ImageView img){this.imageView=img;}/*** 此函数相当于 run函数*/@Overrideprotected Bitmap doInBackground(String... params) {DownImg fileDownload=new DownImg();  //调用图片下载函数,将图片下载到本地,并返回此图片的本地路径String TalkPath = fileDownload.DownLoadFile(params[0], "tt");drawable = BitmapFactory.decodeFile(TalkPath);return drawable; //相当于 Message}/*** 当任务执行之前开始调用此方法,可以在这里显示进度对话框*/@Overrideprotected void onPreExecute() {super.onPreExecute();System.out.println("异步加载开始了");}/*** 此方法在主线程执行,任务执行的结果作为此方法的参数返回。*/@Overrideprotected void onPostExecute(Bitmap result) {// TODO Auto-generated method stubsuper.onPostExecute(result);System.out.println("异步执行完毕了,返回");if (result!=null) {imageView.setImageBitmap(drawable);}}}public class DownImg {HttpURLConnection httpconn = null;public String DownLoadFile(String fileurl, String path) {InputStream inputStream = null;OutputStream outputStream = null;File file = null;String fileName = "";String imgPath = "";try {fileName = fileurl.substring(fileurl.lastIndexOf("/") + 1);FileUtils fileUtils = new FileUtils();imgPath =fileUtils.GetSDPATH() +  path + "/" + fileName;System.out.println(fileurl + "   " + imgPath);if (fileUtils.IsFileExists(path + "/" + fileName)) {System.out.println("已存在此图片,无需下载");return imgPath;}URL url = new URL(fileurl);// 获得或者确定下载的路径HttpURLConnection httpconnCon = (HttpURLConnection) url.openConnection();inputStream = httpconnCon.getInputStream();// 获得字节流fileUtils.CreateSDDir(path);// 确定下载路径(创建你需要的文件夹)file = fileUtils.CreateSDFile(path + "/" + fileName);System.out.println("ddddd---" + file);outputStream = new FileOutputStream(file);byte buffer[] = new byte[4 * 1024];int length = 0;while ((length = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, length);}outputStream.flush();} catch (Exception e) {return null;} finally {try {// inputStream.close();// outputStream.close();} catch (Exception e2) {e2.printStackTrace();}}return imgPath;}}public class FileUtils {private String SDPATH;public FileUtils() {SDPATH = Environment.getExternalStorageDirectory() + "/";//"/mnt/sdcard/"}/*** 获得当前系统的SDPATH路径字符* */public String GetSDPATH() {return SDPATH;}/*** 在SD卡上创建文件* */public File CreateSDFile(String fileName) throws IOException {File file = new File(SDPATH + fileName);boolean isCreate = file.createNewFile();return file;}/*** 在SD卡上创建文件夹* */public File CreateSDDir(String dirName) {File file = new File(SDPATH + dirName);boolean isCreateDir = file.mkdir();return file;}/*** 判断文件是否存在* */public boolean IsFileExists(String fileName) {//"/mnt/sdcard/hhh/aaa.mp3"File file = new File(SDPATH + fileName);return file.exists();}}}

点击下载地址

Android 图片异步加载相关推荐

  1. Android 图片异步加载的体会,SoftReference已经不再适用

    在网络上搜索Android图片异步加载的相关文章,目前大部分提到的解决方案,都是采用Map<String, SoftReference<Drawable>>  这样软引用的方式 ...

  2. android图片异步加载图片,Android 异步加载图片分析总结

    研究了android从网络上异步加载图像,现总结如下: (1)由于android UI更新支持单一线程原则,所以从网络上取数据并更新到界面上,为了不阻塞主线程首先可能会想到以下方法. 在主线程中new ...

  3. android图片异步加载解决步骤

    Android – Asynchronous image loading in ListView Problem: How to load images in ListView asynchronou ...

  4. android复位机器人图片_Universal-Image-Loader 图片异步加载类库还不熟?

    码个蛋(codeegg) 第 824 次推文 作者:欢醉 博客:https://cloud.tencent.com/developer/article/1026386 码妞看世界 写在前面 这个图片异 ...

  5. android 实现异步加载图片,Android中ImageView异步加载图片类

    本源码是从网络找到经修改以方便直接调用感觉用着还可以 首先在项目中添加一个专门加载图片的类AsyncImageLoaderpackage com.demo.core; import java.io.I ...

  6. 又优化了一下 Android ListView 异步加载图片

    写这篇文章并不是教大家怎么样用listview异步加载图片,因为这样的文章在网上已经有很多了,比如这位仁兄写的就很好: http://www.iteye.com/topic/685986 我也是因为看 ...

  7. android webview 图片异步加载,Webview 图片异步加载及bug解决

    在项目中新闻显示需要使用图片的异步加载,并且在加载图片前和加载图片失败时显示默认图片. 关于webview中图片的异步加载的思路如下: 方案一:由前端同学全权负责(使用js实现异步加载) 方案二:an ...

  8. android listview 异步加载图片并防止错位

    网上找了一张图, listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象, 重用 convertVie ...

  9. ListView中的图片异步加载、缓存

    一.ListView的图片异步加载 我们都知道对每一个Weibo Item都有用户头像,而且每一条微博还可能带有图片.如果在加载列表的同时加载图片,这样有几个缺点,第一很费事,界面卡住,用户体验很不好 ...

最新文章

  1. cs嵌html5页面,在.cs c#.net中包含HTML页面
  2. IE内嵌google chrome frame解决浏览器兼容问题
  3. python如何绘制曲线图_python怎么画曲线图
  4. 反思项目调试整体过程
  5. JAVA中的变量和常量
  6. nginx,excel模板下载
  7. PNG图在IE6下透明的终极解决方案
  8. Huffman编码树
  9. wsdl2java工具生成客户端代码
  10. SQL的bit列名转换成access是/否数据类型,True无效的问题
  11. 编程计算二叉树的深度
  12. 实现IP地址归属地显示功能、号码归属地查询
  13. macOS下统计pdf字数
  14. python单位根检验看结果_python做adf检验
  15. python关键词排名批量查排名_Python批量查询百度排名
  16. java创建无法确定大小的数组
  17. 《Steam平台上的VR虚拟现实》(Yanlz+Unity+XR+VR+AR+MR+Steam+SteamVR+Vive+Oculus+Valve+立钻哥哥+==)
  18. 神经网络与深度学习学习笔记(一)——基本概念
  19. 惠勒延迟选择实验_肯·惠勒(Ken Wheeler)与开源软件的兴衰
  20. easyv平台_过滤器强制修改dom(暴力自定义组件渲染样式)

热门文章

  1. 了解Android Studio中的Gradle
  2. cuda临界区问题的总结
  3. tomcat的四种部署方式
  4. SAP系统 开关账期
  5. 01-微发试验台-如何打开tdms文件?以及转换成matlab格式
  6. 卜晓萌‘s lovings
  7. linux 终端 mosh,使用Mosh来优化SSH连接
  8. 对文本进行美化:在中文和英文之间在中文和数字之间增加空格 pangu.spacing_text
  9. 3d 视频切换到全屏播放
  10. 多商户无限座席在线客服在线对话聊天系统源码,防黑防丢,完美商用支持app公众号网页H5