Android 는 AsyncTask 로 네트워크 그림 을 다운로드 하고 백분율 을 표시 합 니 다.
27017 단어 AsyncTask
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical" >
6
7 <ImageView 8 android:id="@+id/mImageView"
9 android:layout_width="300dp"
10 android:layout_height="300dp" />
11
12 <ProgressBar 13 android:id="@+id/mProgressBar"
14 style="?android:attr/progressBarStyleHorizontal"
15 android:layout_width="fill_parent"
16 android:layout_height="wrap_content"
17 android:maxHeight="10dip"
18 android:minHeight="10dip" />
19
20 <Button 21 android:id="@+id/btnGetImg"
22 android:layout_width="120dp"
23 android:layout_height="50dp"
24 android:text="Getmage" />
25
26 <Button 27 android:id="@+id/btnAbort"
28 android:layout_width="120dp"
29 android:layout_height="50dp"
30 android:text="Abort" />
31
32 </LinearLayout>
2.자바 파일 추가 MainActivity.java
1 package com.example.loadimgfrominternet; 2
3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.HttpURLConnection; 7 import java.net.MalformedURLException; 8 import java.net.URL; 9 import java.net.URLConnection; 10
11 import android.app.Activity; 12 import android.content.Context; 13 import android.graphics.Bitmap; 14 import android.graphics.BitmapFactory; 15 import android.os.AsyncTask; 16 import android.os.Bundle; 17 import android.os.SystemClock; 18 import android.view.View; 19 import android.view.View.OnClickListener; 20 import android.widget.Button; 21 import android.widget.ImageView; 22 import android.widget.ProgressBar; 23
24 public class MainActivity extends Activity implements OnClickListener { 25
26 private Button btnGetImg; 27 private Button btnAbort; 28 private ProgressBar mProgressBar; 29 private ImageView mImageView; 30 private static final String ImageUrl = "http://images.cnitblog.com/i/169207/201408/112229149526951.png"; 31
32 ImageLoader loader = null; 33
34 @Override 35 protected void onCreate(Bundle savedInstanceState) { 36 super.onCreate(savedInstanceState); 37 setContentView(R.layout.activity_main); 38 initView(); 39 } 40
41 private void initView() { 42 btnGetImg = (Button) findViewById(R.id.btnGetImg); 43 btnAbort = (Button) findViewById(R.id.btnAbort); 44 mProgressBar = (ProgressBar) findViewById(R.id.mProgressBar); 45 btnGetImg.setOnClickListener(this); 46 btnAbort.setOnClickListener(this); 47
48 mProgressBar.setVisibility(View.INVISIBLE); 49 mImageView = (ImageView) findViewById(R.id.mImageView); 50 } 51
52 @Override 53 public void onClick(View v) { 54 int id = v.getId(); 55 if (id == R.id.btnGetImg) { 56 loader = new ImageLoader(); 57 loader.execute(ImageUrl); 58 btnGetImg.setEnabled(false); 59 } else if (id == R.id.btnAbort) { 60 loader.cancel(true); 61 btnGetImg.setEnabled(true); 62 } 63 } 64
65 class ImageLoader extends AsyncTask<String, Integer, Bitmap> { 66 @Override 67 protected void onPreExecute() { 68 mProgressBar.setVisibility(View.VISIBLE); 69 mProgressBar.setProgress(0); 70 mImageView.setImageResource(R.drawable.noimg); 71 super.onPreExecute(); 72 } 73
74 @Override 75 protected Bitmap doInBackground(String... params) { 76 String imgUri = params[0]; 77
78 try { 79 URL url = null; 80 HttpURLConnection conn = null; 81 InputStream inputStream = null; 82 OutputStream outputStream = null; 83 String filename = "local_temp_image"; 84
85 try { 86
87 url = new URL(imgUri); 88 conn = (HttpURLConnection) url.openConnection(); 89 conn.setDoInput(true); 90 conn.setDoOutput(false); 91 conn.setConnectTimeout(20 * 1000); 92 inputStream = conn.getInputStream(); 93 outputStream = openFileOutput(filename, 94 Context.MODE_PRIVATE); 95 byte[] data = new byte[1024]; 96 int seg = 0; 97 long total = conn.getContentLength(); 98 long current = 0; 99 while (!isCancelled() 100 && (seg = inputStream.read(data)) != -1) { 101 outputStream.write(data, 0, seg); 102 current += seg; 103 int progress = (int) ((float) current / total * 100); 104 publishProgress(progress);// // UI
105 SystemClock.sleep(1000); 106 } 107 } finally { 108 if (conn != null) { 109 conn.disconnect(); 110 } 111 if (inputStream != null) { 112 inputStream.close(); 113 } 114 if (outputStream != null) { 115 outputStream.close(); 116 } 117 } 118 // return BitmapFactory.decodeStream(HandlerData(ImageUrl));
119 return BitmapFactory.decodeFile(getFileStreamPath(filename) 120 .getAbsolutePath()); 121 } catch (MalformedURLException e) { 122 e.printStackTrace(); 123 } catch (IOException e) { 124 e.printStackTrace(); 125 } 126 return null; 127 } 128
129 @Override 130 protected void onProgressUpdate(Integer... values) { 131 if (isCancelled()) 132 return; 133 mProgressBar.setProgress(values[0]); 134 btnGetImg.setText(values[0] + "%"); 135 super.onProgressUpdate(values); 136 } 137
138 @Override 139 protected void onPostExecute(Bitmap bitmap) { 140 if (bitmap != null) { 141 mImageView.setImageBitmap(bitmap); 142 } 143 mProgressBar.setVisibility(View.INVISIBLE); 144 mProgressBar.setProgress(0); 145 btnAbort.setEnabled(false); 146 super.onPostExecute(bitmap); 147 } 148 } 149
150 /* URI */
151 public static InputStream HandlerData(String url) { 152 InputStream inStream = null; 153
154 try { 155 URL feedUrl = new URL(url); 156 URLConnection conn = feedUrl.openConnection(); 157 conn.setConnectTimeout(10 * 1000); 158 inStream = conn.getInputStream(); 159 } catch (Exception e) { 160 e.printStackTrace(); 161 } 162
163 return inStream; 164 } 165 }
3.실행 효과 도 는 다음 과 같다.
4.항목 다운로드 주소 첨부:
http://files.cnblogs.com/_ymw/LoadImgFromInternet_%E5%8D%9A%E5%AE%A2%E9%99%84%E4%BB%B6.rar
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android Activity에서 YouTube 동영상을 전체 화면으로 표시Android 개발이었던 한 가지 과제는 다음과 같습니다. 하나의 활동에 WebView가 있습니다. 그 WebView의 내용은 YouTube 동영상을 임베드한 Iframe입니다. 당연히 WebView 화면의 재생 버...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.