登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 75|回复: 5

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

[复制链接]

222

主题

222

帖子

1448

安币

手工艺人

发表于 2017-12-6 14:54:46 | 显示全部楼层 |阅读模式

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

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

        1.普通的下载方式

        布局文件:

[Java] 查看源文件 复制代码
<

        java文件

[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.带进度条的下载

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

[Java] 查看源文件 复制代码
/**
 * @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) 

        效果如下:

        下载过程:

        

        下载完成:

        

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


17

主题

8292

帖子

-2429

安币

限制会员

发表于 2017-12-7 05:59:29 | 显示全部楼层
感谢分享,楼主V5~

0

主题

1万

帖子

-2479

安币

限制会员

发表于 2017-12-7 18:16:54 | 显示全部楼层
不错不错,楼主辛苦了。。。

11

主题

8449

帖子

-2191

安币

管理员

Rank: 9Rank: 9Rank: 9

推广达人

发表于 2017-12-8 12:24:48 | 显示全部楼层
感觉楼主很用心,辛苦啦~

2

主题

8446

帖子

-2563

安币

限制会员

发表于 2017-12-9 10:22:50 | 显示全部楼层
支持楼主,支持安卓巴士!

8

主题

8780

帖子

-2025

安币

限制会员

QQ达人

发表于 2017-12-10 04:23:58 | 显示全部楼层
楼主是好人,回个帖会有安币吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表