软件编程
位置:首页>> 软件编程>> Android编程>> Android编程实现下载图片及在手机中展示的方法

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

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

标签: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程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com