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

作者:蓝之风 时间:2023-10-26 12:30:59 

本文实例讲述了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,下载图片,展示
0
投稿

猜你喜欢

  • 浅谈java多态的实现主要体现在哪些方面

    2023-08-17 07:41:32
  • Java中反射动态 代理接口的详解及实例

    2023-11-28 05:29:36
  • C# Color.FromArgb()及系统颜色对照表一览

    2021-05-24 08:21:02
  • Android自定义View实现闪耀字体效果

    2023-05-10 02:27:43
  • C# zxing二维码写入的实例代码

    2021-09-01 12:23:26
  • 关于JAVA11中图片与BASE64相互转换的实现

    2022-12-06 06:44:11
  • 详解Android更改APP语言模式的实现过程

    2023-05-18 16:56:35
  • java isInterrupted()判断线程的实例讲解

    2023-07-21 01:45:53
  • java中Class.getMethods()和Class.getDeclaredMethods()方法的区别

    2021-05-28 23:05:46
  • springboot 无法自动装配的问题

    2021-05-29 06:14:30
  • Java使用WatchService监控文件内容变化的示例

    2023-02-15 10:10:19
  • Springboot如何使用mybatis实现拦截SQL分页

    2021-08-15 13:16:56
  • Java如何实现压缩文件与解压缩zip文件

    2022-01-28 09:14:00
  • 利用Java实现简单的词法分析器实例代码

    2023-10-06 08:14:45
  • 详解Java的Spring框架中的事务管理方式

    2022-02-03 13:57:47
  • idea热部署插件jrebel正式版及破解版安装详细图文教程

    2023-05-27 03:28:59
  • Unity实现打砖块游戏

    2023-12-06 04:45:04
  • 一文带你学会规则引擎Drools的应用

    2022-04-03 08:40:59
  • 使用idea+gradle编译spring5.x.x源码分析

    2022-05-13 15:13:31
  • Android实现ListView控件的多选和全选功能实例

    2023-01-04 02:26:50
  • asp之家 软件编程 m.aspxhome.com