全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android编程实现下载图片及在手机中展示的方法

本文实例讲述了Android编程实现下载图片及在手机中展示的方法。分享给大家供大家参考,具体如下:

在项目开发中从互联网上下载图片是经常用到的功能,再次总结一下

1.普通的下载方式

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <ImageView android:src="@drawable/icon"
   android:layout_width="wrap_content"
   android:id="@+id/imgPic"
   android:layout_gravity="center|center_vertical"
   android:layout_height="fill_parent">
 </ImageView>
</LinearLayout>

java文件

public class DownloadImage extends Activity {
  private ImageView imgPic;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.download_image);
    imgPic = (ImageView) findViewById(R.id.imgPic);
    String url = "http://ww1.sinaimg.cn/bmiddle/6834c769jw1djjf4p3p9rj.jpg";
    loadRmoteImage(url);
  }
  /**
   * @param imgUrl
   *   远程图片文件的URL
   *
   *   下载远程图片
   */
  private void loadRmoteImage(String imgUrl) {
    URL fileURL = null;
    Bitmap bitmap = null;
    try {
      fileURL = new URL(imgUrl);
    } catch (MalformedURLException err) {
      err.printStackTrace();
    }
    try {
      HttpURLConnection conn = (HttpURLConnection) fileURL
          .openConnection();
      conn.setDoInput(true);
      conn.connect();
      InputStream is = conn.getInputStream();
      int length = (int) conn.getContentLength();
      if (length != -1) {
        byte[] imgData = new byte[length];
        byte[] buffer = new byte[512];
        int readLen = 0;
        int destPos = 0;
        while ((readLen = is.read(buffer)) > 0) {
          System.arraycopy(buffer, 0, imgData, destPos, readLen);
          destPos += readLen;
        }
        bitmap = BitmapFactory.decodeByteArray(imgData, 0,
            imgData.length);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    imgPic.setImageBitmap(bitmap);
  }

2.带进度条的下载

有时候网络差,或者是图片太大,会出现黑屏的情况,用户体验比较差,那么增加一个进度条是提高用户体验的好方法

/**
 * @author xushilin xsl xushilin@kingtoneinfo.com
 * @version: 创建时间:2011-7-27 下午02:55:56
 * 说 明: android中下载图片
 * 修改历史:
 */
public class DownloadImage extends Activity {
  private ImageView imgPic;
  private ProgressBar progressBar;
  private int totalSize=0;
  private int size=0;
  private Handler mHandler;
  String url = "http://ww1.sinaimg.cn/bmiddle/6834c769jw1djjf4p3p9rj.jpg";
  private Bitmap bitmap=null;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.download_image);
    imgPic = (ImageView) findViewById(R.id.imgPic);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    progressBar.setProgress(getProgressInt(progressBar.getMax()));
    mHandler = new Handler() {
      public void handleMessage(Message msg) {
        progressBar.setProgress(getProgressInt(progressBar.getMax()));
        if(bitmap!=null){
          imgPic.setImageBitmap(bitmap);
        }
      }
    };
    new Thread(){
      public void run(){
        loadRmoteImage(url);
      }
    }.start();
  }
  /**
   * @param imgUrl
   *   远程图片文件的URL
   *
   *   下载远程图片
   */
  private void loadRmoteImage(String imgUrl) {
    URL fileURL = null;
    try {
      fileURL = new URL(imgUrl);
    } catch (MalformedURLException err) {
      err.printStackTrace();
    }
    try {
      HttpURLConnection conn = (HttpURLConnection) fileURL
          .openConnection();
      conn.setDoInput(true);
      conn.connect();
      InputStream is = conn.getInputStream();
      int length = (int) conn.getContentLength();
      totalSize=length;
      if (length != -1) {
        byte[] imgData = new byte[length];
        byte[] buffer = new byte[512];
        int readLen = 0;
        int destPos = 0;
        while ((readLen = is.read(buffer)) > 0) {
          System.arraycopy(buffer, 0, imgData, destPos, readLen);
          destPos += readLen;
          size=destPos;
          mHandler.sendEmptyMessage(1);
          Thread.sleep(100);
        }
        bitmap = BitmapFactory.decodeByteArray(imgData, 0,
            imgData.length);
        mHandler.sendEmptyMessage(1);
      }
    } catch (IOException e) {
      e.printStackTrace();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
  private int getProgressInt(int max) {
    int result = (totalSize > 0) ? (int) (size * max * 1.0 / totalSize) : 0;
    return result;
  }
}

效果如下:

下载过程:

下载完成:

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。


# Android  # 下载图片  # 手机  # 展示  # Android 实现单线程轮循机制批量下载图片  # Android异步下载图片并且缓存图片到本地DEMO详解  # Android带进度条的下载图片示例(AsyncTask异步任务)  # Android使用AsyncTask下载图片并显示进度条功能  # Android实现多线程下载图片的方法  # Android使用okHttp(get方式)下载图片  # Android DownloadMananger管理器实现下载图片功能  # 进阶  # 进度条  # 相关内容  # 感兴趣  # 太大  # 给大家  # 或者是  # 互联  # 更多关于  # 解决方法  # 所述  # 在手  # 图像处理  # 程序设计  # 黑屏  # 机中  # 下午  # 下载完成  # 讲述了 


相关文章: 武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  建站VPS推荐:2025年高性能服务器配置指南  昆明高端网站制作公司,昆明公租房申请网上登录入口?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  浅谈Javascript中的Label语句  如何用VPS主机快速搭建个人网站?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  建站VPS能否同时实现高效与安全翻墙?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  c++ stringstream用法详解_c++字符串与数字转换利器  定制建站模板如何实现SEO优化与智能系统配置?18字教程  昆明网站制作哪家好,昆明公租房申请网上登录入口?  如何快速生成ASP一键建站模板并优化安全性?  代购小票制作网站有哪些,购物小票的简要说明?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  高端建站如何打造兼具美学与转化的品牌官网?  内部网站制作流程,如何建立公司内部网站?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  股票网站制作软件,网上股票怎么开户?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何快速生成橙子建站落地页链接?  建站主机选哪家性价比最高?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  在线制作视频网站免费,都有哪些好的动漫网站?  如何做网站制作流程,*游戏网站怎么搭建?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  电商平台网站制作流程,电商网站如何制作?  PHP正则匹配日期和时间(时间戳转换)的实例代码  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  网站网页制作专业公司,怎样制作自己的网页?  广平建站公司哪家专业可靠?如何选择?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  ,网站推广常用方法?  javascript中对象的定义、使用以及对象和原型链操作小结  电商网站制作价格怎么算,网上拍卖流程以及规则?  重庆市网站制作公司,重庆招聘网站哪个好?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  如何在橙子建站上传落地页?操作指南详解  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何生成腾讯云建站专用兑换码?  ,如何利用word制作宣传手册?  如何续费美橙建站之星域名及服务?  如何在阿里云虚拟服务器快速搭建网站?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  高防服务器租用首荐平台,企业级优惠套餐快速部署 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。