1.添加布局文件:activity_main.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <ImageView
android:id="@+id/mImageView"
android:layout_width="300dp"
android:layout_height="300dp" /> <ProgressBar
android:id="@+id/mProgressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:maxHeight="10dip"
android:minHeight="10dip" /> <Button
android:id="@+id/btnGetImg"
android:layout_width="120dp"
android:layout_height="50dp"
android:text="Getmage" /> <Button
android:id="@+id/btnAbort"
android:layout_width="120dp"
android:layout_height="50dp"
android:text="Abort" /> </LinearLayout>

2.添加java文件MainActivity.java

 package com.example.loadimgfrominternet;

 import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection; import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar; public class MainActivity extends Activity implements OnClickListener { private Button btnGetImg;
private Button btnAbort;
private ProgressBar mProgressBar;
private ImageView mImageView;
private static final String ImageUrl = "https://images0.cnblogs.com/i/169207/201408/112229149526951.png"; ImageLoader loader = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView() {
btnGetImg = (Button) findViewById(R.id.btnGetImg);
btnAbort = (Button) findViewById(R.id.btnAbort);
mProgressBar = (ProgressBar) findViewById(R.id.mProgressBar);
btnGetImg.setOnClickListener(this);
btnAbort.setOnClickListener(this); mProgressBar.setVisibility(View.INVISIBLE);
mImageView = (ImageView) findViewById(R.id.mImageView);
} @Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.btnGetImg) {
loader = new ImageLoader();
loader.execute(ImageUrl);
btnGetImg.setEnabled(false);
} else if (id == R.id.btnAbort) {
loader.cancel(true);
btnGetImg.setEnabled(true);
}
} class ImageLoader extends AsyncTask<String, Integer, Bitmap> {
@Override
protected void onPreExecute() {
mProgressBar.setVisibility(View.VISIBLE);
mProgressBar.setProgress();
mImageView.setImageResource(R.drawable.noimg);
super.onPreExecute();
} @Override
protected Bitmap doInBackground(String... params) {
String imgUri = params[]; try {
URL url = null;
HttpURLConnection conn = null;
InputStream inputStream = null;
OutputStream outputStream = null;
String filename = "local_temp_image"; try { url = new URL(imgUri);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(false);
conn.setConnectTimeout( * );
inputStream = conn.getInputStream();
outputStream = openFileOutput(filename,
Context.MODE_PRIVATE);
byte[] data = new byte[];
int seg = ;
long total = conn.getContentLength();
long current = ;
while (!isCancelled()
&& (seg = inputStream.read(data)) != -) {
outputStream.write(data, , seg);
current += seg;
int progress = (int) ((float) current / total * );
publishProgress(progress);// // 通知进度条UI更新
SystemClock.sleep();
}
} finally {
if (conn != null) {
conn.disconnect();
}
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
// return BitmapFactory.decodeStream(HandlerData(ImageUrl));
return BitmapFactory.decodeFile(getFileStreamPath(filename)
.getAbsolutePath());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
} @Override
protected void onProgressUpdate(Integer... values) {
if (isCancelled())
return;
mProgressBar.setProgress(values[]);
btnGetImg.setText(values[] + "%");
super.onProgressUpdate(values);
} @Override
protected void onPostExecute(Bitmap bitmap) {
if (bitmap != null) {
mImageView.setImageBitmap(bitmap);
}
mProgressBar.setVisibility(View.INVISIBLE);
mProgressBar.setProgress();
btnAbort.setEnabled(false);
super.onPostExecute(bitmap);
}
} /* 根据URI地址读取输入流 */
public static InputStream HandlerData(String url) {
InputStream inStream = null; try {
URL feedUrl = new URL(url);
URLConnection conn = feedUrl.openConnection();
conn.setConnectTimeout( * );
inStream = conn.getInputStream();
} catch (Exception e) {
e.printStackTrace();
} return inStream;
}
}

3.运行效果图如下:

4.附上项目下载地址:

http://files.cnblogs.com/_ymw/LoadImgFromInternet_%E5%8D%9A%E5%AE%A2%E9%99%84%E4%BB%B6.rar

Android 用AsyncTask下载网络图片并显示百分比的更多相关文章

  1. Android初学-AsyncTask下载网络图片

    AsyncTask 异步处理: mainfest: 注意添加的: -------------------- <uses-permission android:name="android ...

  2. Android开发-下载网络图片并显示到本地

    Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...

  3. android 多线程 AsyncTask 下载图片

    AsyncTask 下载图片 package com.test.network; import android.graphics.Bitmap; import android.graphics.Bit ...

  4. AsyncTask下载网络图片

    MyTask task = new MyTask(); task.execute(url); class MyTask extends AsyncTask<String, Integer, Bi ...

  5. Android测试AsyncTask下载图片

    package com.example.myact8_async; import org.apache.http.HttpEntity; import org.apache.http.HttpResp ...

  6. AsyncTask下载网络图片的简单应用

    1.imageTest package lpc.com.asynctaskdemo; import android.app.Activity; import android.graphics.Bitm ...

  7. Android 使用AsyncTask 下载图片的例子,学会使用AsyncTask

    1.添加布局文件:activity_main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res ...

  8. Android中如何下载文件并显示下载进度

    原文地址:http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1125/2057.html 这里主要讨论三种方式:AsyncTask.Serv ...

  9. Android开发学习—— 下载网络图片

    现在几乎所有的应用都在使用网络来达到浏览的目的.对于特定领域 使用xnpp协议 像即时通讯软件.但大多数还是使用HTTP协议来交互. 网络图片查看器 HTTP协议 下载网络 图片 <Relati ...

随机推荐

  1. vector sort AND 友元

    # include<iostream> # include<string> # include<algorithm> # include<stdio.h> ...

  2. windows下eclipse连接ubuntu伪分布式hadoop2.6.0

    环境: win10 jdk1.7 hadoop2.6.0 linux虚拟机 Ubuntu14.04 首先把安装在Ubuntu上的hadoop2.6.0.tar.gz复制到windows系统上,解压到任 ...

  3. 【bzoj2733】[HNOI2012]永无乡 Treap启发式合并

    题目描述 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达 ...

  4. jloi2017(shoi2017?)六省联考酱油记

    Day -n 听说了4.22.4.23的省选,而且还是六省联考. 压力山大. 尽管我只是一名高一的simple OIer,在省选到来之前,心里还是很紧张的. 毕竟自己也知道南方dalao们都是神犇,像 ...

  5. HDU——1394 Minimum Inversion Number

    Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of ...

  6. LeetCode--Factorial Trailing Zeroes(注意)

    Given an integer n, return the number of trailing zeroes in n!. 问题描述:给出一个正整数n,计算n!结构后面有几个0.要求:在多项式时间 ...

  7. 如何在自家厨房里制作LSD

    如何在自家厨房里制作LSD -------------------------------------------------------------------------------- D-麦角酸 ...

  8. Event loop的macro task和micro task

    macrotask在一些文章中也被直接称为task. 一个宿主环境只有一个事件循环,但可以有多个任务队列.宏任务队列(macro task)与微任务队列(micro task)就是其中之二. 每次事件 ...

  9. 【BZOJ 4103】 [Thu Summer Camp 2015]异或运算 可持久化01Trie

    我们观察数据:树套树 PASS    主席树 PASS  一层一个Trie PASS 再看,异或!我们就把目光暂时定在01Tire然后我们发现,我们可以带着一堆点在01Trie上行走,因为O(n*q* ...

  10. 什么是node.js的事件驱动编程

    Node.js现在非常活跃,相关生态社区已经超过Lua(基本上比较知名的功能都有nodejs模块实现).但是我们为何要使用Node.Js?相比传统的webserver服务模式,nodejs有什么优点优 ...