情况简介:
通过两个Timer,分别计时,下发命令,一个开始命令,一个结束命令。
要求:进度条在下发开始命令时开始动画,下发结束命令时达到满值并结束动画。
在MainActivity中,实现两个Timer进行计时,此处到达计时时间会在logcat中输出一条信息,并通过intent开启Progress.java。在Progress.java中实现对进度条的配置。
MainActivity.java的代码:
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
private Timer mTimer1;
private TimerTask mTask1;
private Timer mTimer2;
private TimerTask mTask2;
private long begin_time = 1000 * 4;
private long end_time = 1000 * 22;
private int num = 0;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) this.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this, Progress.class);
intent.putExtra("start", begin_time);
intent.putExtra("end", end_time);
startActivity(intent);
mTimer1 = new Timer();
mTask1 = new TimerTask() {// 几秒之后num自加1
@Override
public void run() {
// TODO Auto-generated method stub
// do someting....
num++;
// Toast.makeText(MainActivity.this, "num=" + num,
// 1).show();
System.out.println("第一次计时");
mTimer1.cancel();
}
};
mTimer1.schedule(mTask1, begin_time);
mTimer2 = new Timer();
mTask2 = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
// do someting....
num++;
// Toast.makeText(MainActivity.this, "num=" + num,
// 1).show();
System.out.println("第二次计时");
mTimer2.cancel();
}
};
mTimer2.schedule(mTask2, end_time);
}
});
}
}
activity.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="${relativePackage}.${activityClass}"
android:background="#cccccc">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="86dp"
android:text="计时开始" />
</RelativeLayout>
Progress.java代码:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;
import android.widget.TextView;
public class Progress extends Activity {
private ProgressBar mProgress;
private TextView textView;
private int mProgressStatues = 0;
private long start_time;
private long end_time;
private int i = 0;
private long delay;
private int m;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.progress);
mProgress = (ProgressBar) this.findViewById(R.id.progressBar1);
textView = (TextView) this.findViewById(R.id.textView1);
Intent intent = getIntent();
start_time = intent.getLongExtra("start", 0);
end_time = intent.getLongExtra("end", 0);
delay = end_time / 100;//进度条每前进一格需要的时间
m=(int)(start_time/delay);//因为要计时到start_time后进度条才开始显示进度
//m就是进度条计时开始需要几次才能开始显示进度
//而(mProgressStatues-m)*delay=mProgressStatues*delay-m*delay
// =mProgressStatues*delay-start_time
//当mProgressStatues=100时, =100*delay-start_time
// =end_time-start_time
//这就是从开始到结束经历的时间
mProgress.setMax(100-m);
new Thread(new Runnable() {
public void run() {
while (mProgressStatues < 100) {
for (; i < 101; i++) {
try {
Thread.sleep(delay);
mProgressStatues = i;
Message msg = new Message();
msg.what = (int) (i * delay);
mHandler.sendMessage(msg);
mHandler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (!((i * delay) < start_time)) {
mProgress.setProgress(mProgressStatues-m);
}
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}).start();
}
public Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
setTime(msg.what, textView);
}
};
protected void setTime(int i, TextView textView) {
long diff = (long) i;
if (!((diff - start_time) < 0)) {
diff = diff - start_time;
long hours = diff / (1000 * 60 * 60);
long minutes = (diff - hours * (1000 * 60 * 60)) / (1000 * 60);
long seconds = (diff - hours * (1000 * 60 * 60) - minutes * (1000 * 60)) / 1000;
System.out.println("" + hours + "小时" + minutes + "分" + seconds + "秒");
textView.setText("" + hours + "小时" + minutes + "分" + seconds + "秒");
}
}
}
progress.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#cccccc" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="200dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="00时00分00秒" />
</LinearLayout>
源码下载:用进度条监视“以Timer控制开始与结束”的任务