浏览 4784 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-10
以下内容Sinfrancis版权所有,专注请注明来自 http://mdev.cc/dev
有很多朋友使用Thread进行Progress的进度控制,这里我们使用Timer和TimerTask控制ProgressBar。
实现效果: 在进度75%之前,每秒钟有5%的进度,在75%之后每秒有1%的进度。
需要的知识: 1、ProgressBar 2、Thread 3、Timer和TimerTask Activity代码:
package cc.androidos.pb; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.ProgressBar; /** * <p> * Progress Bar test * </p> * @author SinFrancis Wong * @version 1.0 * @since 2009-3-10 */ public class ProgressBarTest extends Activity { /** Called when the activity is first created. */ private ProgressBar mProgress = null; /**Static for control the progress*/ public static int mProgressStatus = 0; /**Handler for post message into OS and change UI */ private Handler mHandler = new Handler(); @Override public void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); //set the View setContentView( R.layout.main ); mProgress = ( ProgressBar ) findViewById( R.id.ProgressBar01 ); //Progress Bar Click ! mProgress.setOnClickListener( new View.OnClickListener() { @Override public void onClick( View arg0 ) { ProgressBarTest.mProgressStatus = 0; // a new Timer Timer tt = new Timer(); //Schedule the TimerTash , delay is 0 ms, every 1000ms execute the action tt.schedule( new ReTimerTask(), 0, 1 * 1000 ); //Scout the progress scoutProgress.start(); } } ); } /** * Scout the progress */ Thread scoutProgress = new Thread( new Runnable() { public void run() { while ( mProgressStatus < 100 ) { // Update the progress bar mHandler.post( new Runnable() { public void run() { mProgress.setProgress( mProgressStatus ); } } ); } } } ); } /** * A new TimerTask * @author SinFrancis Wong * @version 1.0 * @since 2009-3-10 */ class ReTimerTask extends TimerTask { @Override public void run() { //以下是监测进度到什么位置,如果在75范围内就对进度+5,如果在75----100之间就对进度+1,否则取消此任务 if( ProgressBarTest.mProgressStatus < 75 ) { ProgressBarTest.mProgressStatus += 5; System.err.println( "<75......." + ProgressBarTest.mProgressStatus ); } else if( ProgressBarTest.mProgressStatus < 100 && ProgressBarTest.mProgressStatus >= 75 ) { ProgressBarTest.mProgressStatus += 1; System.err.println( ">75 || <100......." + ProgressBarTest.mProgressStatus ); } else if( ProgressBarTest.mProgressStatus >= 100 ) { System.err .println( ">100......." + ProgressBarTest.mProgressStatus ); cancel(); } } } 布局文件代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <ProgressBar android:id="@+id/ProgressBar01" android:layout_width="100px" android:layout_height="20px" android:max="100" android:progress="0" style="?android:attr/progressBarStyleHorizontal" //style设置是为了使得ProgressBar变成进度条而不是圆圈 > </ProgressBar> </LinearLayout> 使用线程也可以处理进度,但也需要借助Handler投递改变UI的消息到操作系统中,从而改版ProgressBar。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |