您的位置:首页 > 其它

[安卓初学者实验]使用计时器(Chronometer)实现可暂停的计时器

2016-06-25 09:46 429 查看
1.实验要求

新建一个工程,

a.修改布局文件,使其包含一个计时器(Chronometer)和两个按钮(Button)startButton和stopButton分别表示“开始/暂停/继续”和“结束”;整体采用纵向线性布局,两个按钮可采用局部横向线性布局,注意调整位置为居中;

b.修改主Activity中的onCreate方法,为两个按钮分别定义点击响应函数(可模拟原例子进行)。其中,startButton按钮实现三种状态,分别解释如下:

状态0(初始化):显示“开始”,点击一次则开始计时,同时转到状态1;

状态1(计时中):显示“暂停”,点击一次则暂停计时,同时转到状态2;

状态2(暂停中):显示“继续”,点击一次则继续计时,同时转到状态1。

stopButton按钮实现停止计时,同时将startButton转到状态0。

(提示:SystemClock.elapsedRealtime()函数可返回从开始到当前流逝的时间,无论计时器是否停止,故需要记录暂停到继续之间的时间差dt,并在继续计时时将其减去)

2.布局文件<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp" >

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="开始" />

<Chronometer
android:id="@+id/chronometer1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Chronometer" />

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="停止" />
</LinearLayout>

3.onCreate函数

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ch = (Chronometer) findViewById(R.id.chronometer1);
start = (Button) findViewById(R.id.button1);
start.setOnClickListener(new OnClickListener(){
public void onClick(View source){
if (ctrl==0){ ch.setBase(SystemClock.elapsedRealtime()); //初始化时间
ch.start();
start.setText("暂停");
ctrl = 1;
}
else if( ctrl==1 ){ //暂停计时
ch.stop();
dt = SystemClock.elapsedRealtime()- ch.getBase(); // 保存这次记录了的时间
ctrl = 2;
start.setText("继续");
}
else if( ctrl==2 ){ //继续计时
ch.setBase(SystemClock.elapsedRealtime() - dt + 1); // 跳过已经记录了的时间
ch.start();
ctrl = 1;
start.setText("暂停");
}

}
});

stop = (Button) findViewById(R.id.button2);
stop.setOnClickListener(new OnClickListener(){ //停止计时
public void onClick(View source){
ch.stop();
//ch.setBase(SystemClock.elapsedRealtime()); //写错了的
ctrl = 0;
start.setText("开始");
}
});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: