Android 用AsyncTask下载网络图片并显示百分比
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下载网络图片并显示百分比的更多相关文章
- Android初学-AsyncTask下载网络图片
AsyncTask 异步处理: mainfest: 注意添加的: -------------------- <uses-permission android:name="android ...
- Android开发-下载网络图片并显示到本地
Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...
- android 多线程 AsyncTask 下载图片
AsyncTask 下载图片 package com.test.network; import android.graphics.Bitmap; import android.graphics.Bit ...
- AsyncTask下载网络图片
MyTask task = new MyTask(); task.execute(url); class MyTask extends AsyncTask<String, Integer, Bi ...
- Android测试AsyncTask下载图片
package com.example.myact8_async; import org.apache.http.HttpEntity; import org.apache.http.HttpResp ...
- AsyncTask下载网络图片的简单应用
1.imageTest package lpc.com.asynctaskdemo; import android.app.Activity; import android.graphics.Bitm ...
- Android 使用AsyncTask 下载图片的例子,学会使用AsyncTask
1.添加布局文件:activity_main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res ...
- Android中如何下载文件并显示下载进度
原文地址:http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1125/2057.html 这里主要讨论三种方式:AsyncTask.Serv ...
- Android开发学习—— 下载网络图片
现在几乎所有的应用都在使用网络来达到浏览的目的.对于特定领域 使用xnpp协议 像即时通讯软件.但大多数还是使用HTTP协议来交互. 网络图片查看器 HTTP协议 下载网络 图片 <Relati ...
随机推荐
- eclipse版本命名规则与其他软件命名
文章:Eclipse各版本代号一览表 eclipse使用星球.神话人物.元素名称作为命名代号. 所以思路要放宽,不要拘泥于已有经验. java是用咖啡命名的: python中文意思是蟒蛇: 不拘泥于已 ...
- Mac上基于hexo+GitHub搭建个人博客(一)
原文地址: http://fanjiajia.cn/2018/11/23/Mac%E4%B8%8A%E5%9F%BA%E4%BA%8Ehexo+GitHub%E6%90%AD%E5%BB%BA%E4% ...
- 【转】给大家分享一下目前mlc颗粒的内存卡资料
以下信息是LZ从其它论坛上找到的TF卡也是有讲究的,一分价钱一分货 dboy99 楼主 骚(6) #1楼 2015-8-5 14:49引用Micro SD卡也叫TF卡,作为手机扩展存储空间的唯一方式用 ...
- 从零开始配置Jenkins(二)——常见问题及排错思路
[前言] 一年多以前就听说Jenkins了,那时知道是它可以完成自动构建,感觉蛮强大的.后来,很多人都说它很恶心.最近,公司需要搭建新的服务器,小编就负责从头开始配置并且发布部署成功每一条线每一个项目 ...
- BZOJ4311 向量(线段树分治+三分)
由点积的几何意义(即投影)可以发现答案一定在凸壳上,并且投影的变化是一个单峰函数,可以三分.现在需要处理的只有删除操作,线段树分治即可. #include<iostream> #inclu ...
- [POI2011]Lightning Conductor
题面在这里 description 已知一个长度为\(n\)的序列\(a_1,a_2,...,a_n\). 对于每个\(1\le i\le n\),找到最小的非负整数\(p\), 满足对于任意的\(1 ...
- ViewData和ViewBag的那些事
既然结论是“共享着相同的数据”,那我们就证实一下吧. 看来结论是正确的. 去查看定义,发现他们的类型是不一样的,ViewData是ViewDataDictionary,ViewBag是dynamic. ...
- iOS 全局变量设置的几种方式~
在iOS开发过程中关于全局变量的几个方法 1. 在APPDelegate中声明并初始化全局变量.AppDelegate可以在整个应用程序中调用,在其他页面中可以使用代码段获取AppDelegate的全 ...
- java基础知识(二)-----多态和构造函数
一:前言 最近由于面试了新浪公司,面试官问我的问题我都不知道,觉得自己好菜,所以最近决定再把java基础给搞一遍,真的觉得自己好菜.每天看一点,那个家伙说<java编程思想>最少要看三遍, ...
- 【Foreign】阅读 [线段树][DP]
阅读 Time Limit: 10 Sec Memory Limit: 256 MB Description Input Output Sample Input 0 10 4 10 2 3 10 8 ...