Chronometer实现计时器 开始、暂停、停止功能

需要实现一个计时器功能,包含开始、暂停、停止的功能,且开始和暂停是一个控件,至于为啥,设计就是这样的,木有办法。

首先想到的是Chronometer,那就用它吧,直接老规矩上代码,方便以后复制粘贴

页面是这样的

Chronometer实现计时器 开始、暂停、停止功能_第1张图片

点开始的时候开始计时,文字变成暂停,结束不显示

点暂停的时候暂停计时,结束显示,此时点暂停继续计时页面如上行,点结束结束计时

不会传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文件




    

    

    

 

你可能感兴趣的:(android,Chronometer)