Android有進度條的下載圖片并且顯示圖片

fmms 12年前發布 | 288K 次閱讀 Android Android開發 移動開發

   采用progressBar控件寫一個有進度條的下載文件例子!下面的代碼就是下載一個圖片,并且把圖片顯示出來的代碼:

layout文件布局很簡單:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quot;
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/bt"
    android:text="開始下載文件" />

<ProgressBar
    android:id="@+id/pb"
    android:layout_width="fill_parent"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_height="wrap_content" />
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/img"/>

</LinearLayout></pre>
一個文件工具類:

package com.spring.sky.download;

import java.io.File;

import android.content.Context; import android.os.Environment; import android.util.Log; /**

  • 文件工具類
  • @author spring sky
  • Email:vipa1888@163.com
  • QQ:840950105
  • name:石明政 / public class FileUtil { /**
    • 檢驗SDcard狀態
    • @return boolean */ public static boolean checkSDCard() { if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
       return true;
      
      }else{
       return false;
      
      } } /**
    • 保存文件文件到目錄
    • @param context
    • @return 文件保存的目錄 */ public static String setMkdir(Context context) { String filePath; if(checkSDCard()) {
       filePath = Environment.getExternalStorageDirectory()+File.separator+"myfile";
      
      }else{
       filePath = context.getCacheDir().getAbsolutePath()+File.separator+"myfile";
      
      } File file = new File(filePath); if(!file.exists()) {
       boolean b = file.mkdirs();
       Log.e("file", "文件不存在  創建文件    "+b);
      
      }else{
       Log.e("file", "文件存在");
      
      } return filePath; } }</pre>下面就是界面上的邏輯處理:
      package com.spring.sky.download;

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection;

import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.Toast; /**

  • 文件下載界面
  • @author spring sky
  • Email:vipa1888@163.com
  • QQ:840950105
  • name:石明政 / public class IndexActivity extends Activity implements OnClickListener{ private static final int DOWNLOAD_PREPARE = 0; private static final int DOWNLOAD_WORK = 1; private static final int DOWNLOAD_OK = 2; private static final int DOWNLOAD_ERROR =3; private static final String TAG = "IndexActivity"; private Button bt ; private ProgressBar pb; private ImageView img; /**

    • 需要下載的文件
    • 注意:在模擬器上面使用無法解析有域名的主機 */ private String url = "http://61.155.165.32/shuixiyue/pic/item/f141247490d0e96fb251b963.jpg&quot;; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bt = (Button) this.findViewById(R.id.bt); bt.setOnClickListener(this); pb = (ProgressBar) this.findViewById(R.id.pb); pb.setVisibility(ProgressBar.INVISIBLE); img =(ImageView) this.findViewById(R.id.img); }

      /**

    • 按鈕點擊事件 */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt:
       Toast.makeText(this, "開始下載文件", Toast.LENGTH_SHORT).show();
       new Thread(){
           @Override
           public void run() {
               downloadFile();
               super.run();
           }
       }.start();
       break;
      
      } } /**
    • 文件下載 */ private void downloadFile() { try {
       URL u = new URL(url);
       URLConnection conn = u.openConnection();
       conn.connect();
       InputStream is = conn.getInputStream();
       fileSize = conn.getContentLength();
       if(fileSize<1||is==null)
       {
           sendMessage(DOWNLOAD_ERROR);
       }else{
           sendMessage(DOWNLOAD_PREPARE);
           FileOutputStream fos = new FileOutputStream(getPath());
           byte[] bytes = new byte[1024];
           int len = -1;
           while((len = is.read(bytes))!=-1)
           {
               fos.write(bytes, 0, len);
               downloadSize+=len;
               sendMessage(DOWNLOAD_WORK);
           }
           sendMessage(DOWNLOAD_OK);
           is.close();
           fos.close();
       }
      
      } catch (Exception e) {
       sendMessage(DOWNLOAD_ERROR);
       e.printStackTrace();
      
      } } /**
    • 文件一共的大小 */ int fileSize = 0; /**
    • 已經下載的大小 */ int downloadSize = 0; /**
    • handler處理消息 */ private Handler handler = new Handler(){

      @Override public void handleMessage(Message msg) {

       switch (msg.what) {
       case DOWNLOAD_PREPARE:
           Toast.makeText(IndexActivity.this, "下載準備", Toast.LENGTH_SHORT).show();
           pb.setVisibility(ProgressBar.VISIBLE);
           Log.e(TAG, "一共:"+fileSize);
           pb.setMax(fileSize);
           break;
       case DOWNLOAD_WORK:
           Log.e(TAG, "已下載:"+downloadSize);
           pb.setProgress(downloadSize);
           int res = downloadSize*100/fileSize;
           bt.setText("已下載:"+res+"%");
           break;
       case DOWNLOAD_OK:
           try {
               if(getPath().endsWith(".jpg")||getPath().endsWith(".png")){
                   FileInputStream fis = new FileInputStream(getPath());
                   img.setImageBitmap(BitmapFactory.decodeStream(fis));
               }
               downloadSize = 0;
               fileSize = 0;
           } catch (FileNotFoundException e) {
               e.printStackTrace();
           } catch (IOException e) {
               e.printStackTrace();
           }
           Toast.makeText(IndexActivity.this, "下載完成", Toast.LENGTH_SHORT).show();
           break;
       case DOWNLOAD_ERROR:
           Toast.makeText(IndexActivity.this, "下載出錯", Toast.LENGTH_SHORT).show();
           break;
       }
       super.handleMessage(msg);
      

      } }; /**

    • 得到文件的保存路徑
    • @return
    • @throws IOException */ private String getPath() throws IOException { String path = FileUtil.setMkdir(this)+File.separator+url.substring(url.lastIndexOf("/")+1); return path; } /**
    • 給hand發送消息
    • @param what */ private void sendMessage(int what) { Message m = new Message(); m.what = what; handler.sendMessage(m); } }</pre>

      轉自: http://blog.csdn.net/vipa1888/article/details/7208956
 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!