用Chronomete实现计时器功能
一、项目要求
1.完成Chronometer的显示和控制。
2.击开始按钮后,开始显示当前时间,并进行读秒计时,要求一定要显示中文星期,并且能够根据当前的日期,通过程序自动设置。
3.点击停止按钮后,显示当前时间,停止读秒计时
4.点击重置按钮后,显示初始状态,停止读秒计时
二、布局设计
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<Chronometer
android:id="@+id/ch"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:orientation="horizontal">
<Button
android:id="@+id/bt_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始计时" />
<Button
android:id="@+id/bt_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止计时" />
<Button
android:id="@+id/bt_reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重置" />
</LinearLayout>
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/t_c"
android:format24Hour="yyyy-MM-dd HH:mm:ss EEEE"
android:visibility="gone"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/t_v"
android:visibility="visible"
android:text="初始状态"
/>
</LinearLayout>
注意事项: android :visibility的使用,如下:
可见(visible)
XML文件:android:visibility="visible"
Java代码:view.setVisibility(View.VISIBLE);
不可见(invisible)
XML文件:android:visibility="invisible"
Java代码:view.setVisibility(View.INVISIBLE);
隐藏(GONE)
XML文件:android:visibility="gone"
Java代码:view.setVisibility(View.GONE);
效果图:
三、MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextClock t_c;
TextView t_v;
Button but_start;
Button but_stop;
Button but_reset;
Chronometer ch;
long stopTime;
boolean flag=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
ch= (Chronometer) findViewById(R.id.ch);
but_start=(Button) findViewById(R.id.bt_start);
but_stop=(Button) findViewById(R.id.bt_stop);
but_reset=(Button) findViewById(R.id.bt_reset);
t_v=(TextView) findViewById(R.id.t_v);
t_c=(TextClock) findViewById(R.id.t_c);
//注册监听器
but_start.setOnClickListener(this);
but_stop.setOnClickListener(this);
but_reset.setOnClickListener(this);
ch.setOnClickListener(this);
ch.setFormat("计时:%s");
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_start:
if (!flag){
flag=!flag;
if (stopTime!=0) {//设置开始时间
ch.setBase(ch.getBase()+(SystemClock.elapsedRealtime()-stopTime));
}else{
ch.setBase(SystemClock.elapsedRealtime());
}
ch.start();
but_start.setEnabled(false);
t_c.setVisibility(View.VISIBLE);
t_v.setVisibility(View.INVISIBLE);
}
break;
case R.id.bt_stop:
if(flag){
flag=!flag;
ch.stop();
stopTime = SystemClock.elapsedRealtime();
but_start.setEnabled(true);
}
break;
case R.id.bt_reset:
ch.stop();
ch.setBase(SystemClock.elapsedRealtime());
stopTime=0;
flag=false;
but_start.setEnabled(true);
t_v.setVisibility(View.VISIBLE);
t_c.setVisibility(View.GONE);
}
}
四、设计思路:
1.当点击停止按钮时,应当减去停止的时间
2.对重置按钮是否点击进行记录,否则会出现负数ude形式。