需要实现一个计时器功能,包含开始、暂停、停止的功能,且开始和暂停是一个控件,至于为啥,设计就是这样的,木有办法。
首先想到的是Chronometer,那就用它吧,直接老规矩上代码,方便以后复制粘贴
页面是这样的
点开始的时候开始计时,文字变成暂停,结束不显示
点暂停的时候暂停计时,结束显示,此时点暂停继续计时页面如上行,点结束结束计时
不会传gif,就这样吧
java文件
public class MainActivity extends AppCompatActivity {
boolean isPause;
private Chronometer mChronometer;
private TextView mTvStart;
private TextView mTvEnd;
private long mRecordTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mChronometer = findViewById(R.id.chronometer);
mTvStart = findViewById(R.id.tvStart);
mTvEnd = findViewById(R.id.tvEnd);
mTvStart.setOnClickListener(clickListener());
mTvEnd.setOnClickListener(clickListener());
}
private View.OnClickListener clickListener() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tvStart:
if (!isPause) {
if (mRecordTime != 0) {
mChronometer.setBase(mChronometer.getBase() + (SystemClock.elapsedRealtime() - mRecordTime));
} else {
mChronometer.setBase(SystemClock.elapsedRealtime());
}
mChronometer.start();
mTvStart.setText("暂停");
mTvEnd.setVisibility(View.GONE);
} else {
mRecordTime = SystemClock.elapsedRealtime();
mChronometer.stop();
mTvStart.setText("开始");
mTvEnd.setVisibility(View.VISIBLE);
}
isPause = !isPause;
break;
case R.id.tvEnd:
mChronometer.stop();
mChronometer.setBase(SystemClock.elapsedRealtime());
mRecordTime = 0;
isPause = false;
break;
default:
break;
}
}
};
}
}
xml文件
<?xml version="1.0" encoding="utf-8"?>
<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"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<Chronometer
android:id="@+id/chronometer"
android:layout_width="100dp"
android:layout_height="100dp"
android:gravity="center_horizontal"
tools:ignore="MissingConstraints" />
<TextView
android:id="@+id/tvStart"
android:layout_width="60dp"
android:layout_height="30dp"
android:layout_below="@+id/chronometer"
android:gravity="center"
android:text="开始" />
<TextView
android:visibility="gone"
android:id="@+id/tvEnd"
android:layout_width="60dp"
android:layout_height="30dp"
android:layout_below="@+id/chronometer"
android:layout_toEndOf="@+id/tvStart"
android:gravity="center"
android:text="结束" />
</RelativeLayout>