Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android開發下載圖片展示

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 = "圖片文件地址"
  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.帶進度條的下載

  有時候網絡差,或者是圖片太大,會出現黑屏的情況,用戶體驗比較差,那麼增加一個進度條是提高用戶體驗的好方法

  /**
   * @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://android.tgbus.com/Android/UploadFiles_4504/201107/20110729103701841.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;
   }
  }

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved