ProgressBar与Handler的整合应用

在android中进度条使用ProgressBar表示,用于向用户显示某个耗时操作完成的百分比     之ProgressBar与Handler的整合应用

1.在xml文件中通过<ProgressBar>标记添加,表示基本如下:

1 <ProgressBar
2 android:id="@+id/progressBar1"          style="?android:attr/progressBarStyleHorizontal"          android:layout_width="fill_parent"         android:layout_height="wrap_content" />

部分xml属性如下:

android:max-->设置进度条的最大值
android:progress-->指定进度条已经完成的进度值
android:progressDrawable-->设置进度条轨道的绘制形式

关于progressBar的style

style="?android:attr/progressBarStyleHorizontal"    细长水平进度条
style="?android:attr/progressBarStyleLarge"         大原型水平进度条

setIndeterminate  设置indeterminate为false 滚动条告知自己正在忙碌,若为true,则可以根据进度设置进度值

代码如下

activity_main.xml
<RelativeLayout 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"
tools:context=".MainActivity" >
<TextView
 android:id="@+id/tv1"
android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" />
<ProgressBar
 android:id="@+id/pb"
android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/tv1"
android:visibility="gone" />
<Button
android:id="@+id/btn"
 android:layout_width="wrap_content"        android:layout_height="wrap_content"
android:text="点击"
 android:layout_below="@id/pb" />
</RelativeLayout>
MainActivity.java
public class MainActivity extends Activity {
private TextView tv1;    private ProgressBar pb;
private Button btn;
private int count;
@Override
protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);
tv1 = (TextView) findViewById(R.id.tv1);
pb = (ProgressBar) findViewById(R.id.pb);
btn = (Button) findViewById(R.id.btn);
//调用setIndeterminate设置indeterminate为false 滚动条告知自己正在忙碌,若为true,则可以根据进度设置进度值        pb.setIndeterminate(false);                btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//点击按钮,ProgressBar显示                pb.setVisibility(View.VISIBLE);
//指定ProgressBar最大值为100                pb.setMax(100);
//指定初始值为0                pb.setProgress(0);
//开启线程,更改ProgressBar的值
new Thread (new Runnable() {                                                                                @Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
count = (i + 1)*20;                                Thread.sleep(1000);
//线程运行5秒后结束
if (i == 4) {                                    Message msg = new Message();                                    msg.what = 0;                                    handle.sendMessage(msg);                                    break;                                }else{
Message msg = new Message();                                    msg.what = 1;                                    

handle.sendMessage(msg);                                }
} catch (Exception e) {                            }
}
}
}).start();
}
});
}
Handler handle = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
tv1.setText("数据加载完毕");
//设置ProgressBar隐藏                pb.setVisibility(View.GONE);
//线程中断                

Thread.currentThread().interrupt();                break;
case 1:
if (!Thread.currentThread().interrupted()) {                    pb.setProgress(count);
//将进度显示在setText中                    tv1.setText("==================");                

}
break;
default:
break;
}
};
};
时间: 2024-08-05 10:57:51

ProgressBar与Handler的整合应用的相关文章

Android 测试Handler的基本使用

package com.sherlock.app_handler; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import andro

android内部通信handler

什么是handler? handler主要用在用户同自己创建的线程进行通信,andorid应用程序在主线程中会维护一个消息队列,通过Message对象在线程间进行通信.在handler内部的handlerMessage中处理消息请求 其实学习过VC++的朋友应该可以很好的理解handler,类似于VC++中的消息处理 Message对象都都存储了什么? 一共有4个参数,arg1,arg2,obj,what arg1和arg2 是int类型,可以通过成员方法setData和getData访问进行修

Android 基础总结:( 十五)Handler详解(下)

Android GWES之Android消息系统 Looper,Handler,View 我们要理解Android的消息系统,Looper,Handle,View等概念还是需要从消息系统的基本原理及其构造这个源头开始.从这个源头,我们才能很清楚的看到Android设计者设计消息系统之意图及其设计的技术路线. 1.消息系统的基本原理 从一般的系统设计来讲,一个消息循环系统的建立需要有以下几个要素: 消息队列 发送消息 消息读取 消息分发 消息循环线程 首先来研究一下消息驱动的基本模型,我使用如下的

progressbar请求数据 加载demo1

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ProgressBar android:id="

6、android 网络编程

1.基于socket的用法 服务器端: 先启动一个服务器端的socket     ServerSocket svr = new ServerSocket(8989); 开始侦听请求 Socket s = svr.accept(); 取得输入和输出 DataInputStream dis = new DataInputStream(s.getInputStream()); DataOutputStream dos = new DataOutputStream(s.getOutputStream()

ListView分栏--制作分栏音乐列表

之前我遇到过这样的需求,要求在ListView中按时间对数据分栏,当时的做法是在每个ListView的item中加入时间栏的布局,然后在代码中控制时间栏 的显示与隐藏. 但其实重写Adapter两个方法后就可以完成这个任务,当ListView中带有不同布局的时候,可以根据itemType来加载不同的布局. int getItemViewType(int position) 返回指定position的itemView的viewType,用于加载不同布局.此方法必须返回0到getViewTypeCo

Android实现网络多线程断点续传下载(转)

本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多线程断点需要什么功能? 1.多线程下载, 2.支持断点. 使用多线程的好处:使用多线程下载会提升文件下载的速度.那么多线程下载文件的过程是:  (1)首先获得下载文件的长度,然后设置本地文件的长度. HttpURLConnection.getContentLength();//获取下载文件的长度 R

Android-线程更新UI的几个方式

如图,Android上新开的线程如想更新UI,需要重新跳到主线程中才能操作,以下是老外给出的几种方案,大家多多学习下. 1通过UI控件post一个runnable子类: private void loadIcon() { new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(mDelay); } catch (InterruptedException e) { e.printStackTrace(

Android实现网络多线程断点续传下载

本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多线程断点需要什么功能? 1.多线程下载, 2.支持断点. 使用多线程的好处:使用多线程下载会提升文件下载的速度.那么多线程下载文件的过程是: (1)首先获得下载文件的长度,然后设置本地文件的长度. HttpURLConnection.getContentLength();//获取下载文件的长度 Ra