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

来源:互联网 发布:开源 数据上报 编辑:程序博客网 时间:2024/05/19 18:38

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("开始");        }        });    } 


0 0
原创粉丝点击