[安卓初学者实验]使用计时器(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("开始");
}
});
}
新建一个工程,
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("开始");
}
});
}
相关文章推荐
- C++设计模式浅识职责链模式
- Mac 键盘快捷键
- 实习杂记(25):@ViewDebug.ExportedProperty
- linux PPTP 代理上网
- caffe源码阅读(3)-Datalayer
- android studio 预览时 com/android/util/PropertiesMap
- LeetCode第50.之Pow(x, n)
- MySQL关于字符串中数字排序的问题分析
- Web_PHP_Curl浅说;
- MyBatis Generator生成sqlMap、DAO、mo
- 263. Ugly Number 丑数
- Firefox清空缓存的快捷键
- 想赚大钱,就别太着急!
- textField:shouldChangeCharactersInRange:replacementString:
- [随记]浅谈pdfobject.js实现网页PDF文件浏览
- JSP简单运行原理----------九大隐式对象和四大域对象
- iOS多线程编程
- VS2013/VS2015无法安装Visual Assist 调试笔记
- poj 1144 Network 无向图求割点
- AbAndroidStudio报错“unable to create debug bridge:ubable to start adb server”