AsyncTask案例——异步加载一张图片并显示进度条
来源:互联网 发布:淘宝客服泄露买家信息 编辑:程序博客网 时间:2024/05/18 00:23
案例描述:
通过一个固定的URL连接,从网上加载图片,并最后形成Bitmap显示在ImageView上,
同时在加载的过程中,显示一个进度条,加载完毕后关掉进度条,显示图片。
(1)main_layout.xml布局文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="match_parent" /> <ProgressBar android:id="@+id/progressbar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:visibility="gone" /></RelativeLayout>
(2)MainActivity.java文件:
package mMainActivity;import java.io.BufferedInputStream;import java.io.IOException;import java.io.InputStream;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import com.test.asynctaskdemoxiao.R;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.ImageView;import android.widget.ProgressBar;public class MainActivity extends Activity{private ImageView mImageView;private ProgressBar mProgressBar;private static String url = "http://img0.imgtn.bdimg.com/it/u=1070902365,2619384777&fm=21&gp=0.jpg"; private MyAsycTask mTesk;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main_layout);mImageView = (ImageView) findViewById(R.id.image);mProgressBar = (ProgressBar) findViewById(R.id.progressbar);// 通过MyAsycTask的execute就可以开启异步线程操作, // 在execute方法中传进去一个或多个参数作为下面String... params的参数。 mTesk = new MyAsycTask(); mTesk.execute(url); }/* * 在Activity执行onPause生命周期时,我们对AsyncTask进行判断, * * */ @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); // 当不为空且Running: if(mTesk != null && mTesk.getStatus() == AsyncTask.Status.RUNNING){ // cancel方法只是将对应的AsyncTask标记为cancel状态,并不是真正的取消线程的执行。 mTesk.cancel(true); } } /* * 创建内部类 MyAsycTask: * 三个参数<url类型,进度值类型,返回值类型> * */ class MyAsycTask extends AsyncTask<String, Integer, Bitmap>{ /* * 在doInBackground方法之前先执行onPreExecute方法: * 异步操作的初始化操作。 * */ @Override protected void onPreExecute() { super.onPreExecute(); // 将ProgressBar显示出来: mProgressBar.setVisibility(View.VISIBLE); } /* * 真正的异步操作处理 * */ @Override protected Bitmap doInBackground(String... params) { // 第一步:获取传递进来的参数 // String... params代表可变长数组,也就是说我们可以传递不止一个参数进来, // 由于我们只传进来一个参数,所以取对应的url即可。 String url = params[0]; Bitmap bitmap = null; URLConnection connection; InputStream is; // 用于获取数据的输入流。 try {// 将一个URL对象解析程一个Bitmap对象: connection = new URL(url).openConnection(); // 获取网络连接对象 is = connection.getInputStream(); // 获取输入流 BufferedInputStream bis = new BufferedInputStream(is); // 模拟整个进度栏的更新: for(int i=0; i<100; i++){ publishProgress(i); // 这里的这个i值会传给下面onProgressUpdate的values try { Thread.sleep(300); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 第二步:通过decodeStream解析输入流为bitmap对象: bitmap = BitmapFactory.decodeStream(bis); is.close(); // 关闭输入流 bis.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 将Bitmap作为返回值返回给后面调用的方法(onPostExecute): return bitmap; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); // 将进度值传给我们布局中的进度条 mProgressBar.setProgress(values[0]); } /* * 在doInBackground方法之后执行onPostExecute方法: * 可以在这里操作UI,设置图像, * */ @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); // 取消进度条显示: mProgressBar.setVisibility(View.GONE); // 设置图像显示内容: mImageView.setImageBitmap(result); } } }
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.asynctaskdemoxiao" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="20" /> <uses-permission android:name="android.permission.INTERNET" /> <applicationandroid:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="mMainActivity.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
1 0
- AsyncTask案例——异步加载一张图片并显示进度条
- Android进阶之动态加载图片(AsyncTask异步加载并显示进度条)
- AsyncTask异步加载图片(显示进度条刻度)
- Android批量图片加载经典系列——使用LruCache、AsyncTask缓存并异步加载图片
- 使用AsyncTask下载图片并显示进度条
- AsyncTask异步加载图片 进度条显示进度 -- Android学习之路
- AsyncTask案例——异步加载ListView内容,包括优化
- 异步加载图片AsyncTask
- AsyncTask异步加载图片
- AsyncTask异步加载图片
- android AsyncTask异步下载并更新进度条
- android异步下载图片并显示水平进度条
- Android 异步加载图片-AsyncTask
- Android 异步加载图片-AsyncTask
- AsyncTask异步加载图片示例
- 使用AsyncTask异步加载图片
- AsyncTask 异步显示网络图片
- AsyncTask的案例 异步下载图片
- C中参数个数可变的函数
- 'Running Android Lint' has encountered a problem.解决方法
- 把word文档格式在线转成pdf格式
- osg程序运行时出现缺少zlibd1.dll 程序无法运行
- Redis存储分页数据
- AsyncTask案例——异步加载一张图片并显示进度条
- Gulp详解
- 欢迎使用CSDN-markdown编辑器
- 浅析PC机串口通讯流控制
- POJ 3723 Conscription(最小生成树-Kruskal)
- 分布式软件体系结构风格(C/S,B/S)
- Unity3D组件
- Qt中国象棋
- Android中使用4种方式实现按钮点击操作