Android开发——倒计时器自定义chronometer

来源:互联网 发布:星际淘宝网588 编辑:程序博客网 时间:2024/06/07 19:15

  昨天我们说好了今天做出来一个倒计时器,然后博主不知道倒计时这个逻辑是通过控件实现的还是通过算法实现的就去网上“借”,在网上找了N多实例,然后发现倒计时的还真的是不多。不过也是有的,所以博主找了一个不错的,捋了捋,然后分享给大家。

CountDown.java

package com.example.chronometer;import java.text.SimpleDateFormat;import java.util.Date;import android.content.Context;import android.util.AttributeSet;import android.widget.Chronometer;/** * @author Squid * */public class CountDown extends Chronometer{private long time;private long nextTime;private OnTimeCompleteListener clistener;private SimpleDateFormat format;public CountDown(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubformat=new SimpleDateFormat("mm:ss");this.setOnChronometerTickListener(listener);}/* *  * 设置时间格式 */public void setTimeFormat(String pattern){format=new SimpleDateFormat(pattern);}public void setOnTimeCompleteListener(OnTimeCompleteListener l) {clistener=l;}OnChronometerTickListener listener=new OnChronometerTickListener() {@Overridepublic void onChronometerTick(Chronometer chronometer) {// TODO Auto-generated method stubif (nextTime<=0) {if (nextTime==0) {CountDown.this.stop();if (null!=clistener) {clistener.onTimeComplete();}}nextTime=0;updateTimeNext();return;}nextTime--;updateTimeNext();}};/* * 初始化时间 */public void initTime(long _time_s){time=nextTime=_time_s;updateTimeNext();}private void updateTimeNext() {// TODO Auto-generated method stubthis.setText(format.format(new Date(nextTime*1000)));}/* * 重启 */public void reStart(long _time_s){if (_time_s==-1) {nextTime=time;}else{time=nextTime=_time_s;}this.start();}public void reStart(){reStart(-1);}/* * 继续计时 */public void onResume(){this.start();}/* * 暂停计时 */public void onPause(){this.stop();}interface OnTimeCompleteListener{void onTimeComplete();}}
MainActivity.java

package com.example.chronometer;import com.example.chronometer.CountDown.OnTimeCompleteListener;import android.R.integer;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity {private CountDown countDown;private int initTime=120;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);countDown=(CountDown)findViewById(R.id.cd);countDown.initTime(initTime);countDown.setOnTimeCompleteListener(new OnTimeCompleteListener(){@Overridepublic void onTimeComplete() {// TODO Auto-generated method stubToast.makeText(getApplicationContext(), "倒计时结束", Toast.LENGTH_LONG).show();}});}public void btnClick(View view){int id=view.getId();switch (id) {case R.id.button1:countDown.reStart();break;case R.id.button2:countDown.onPause();break;case R.id.button3:countDown.onResume();break;case R.id.button4:countDown.stop();countDown.initTime(initTime);break;default:break;}}}
activity_main.xml

<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:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.chronometer.MainActivity" >    <LinearLayout         android:id="@+id/ll"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">        <com.example.chronometer.CountDown             android:id="@+id/cd"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_horizontal"            android:textSize="60dp"/>                <Button            android:id="@+id/button1"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginTop="22dip"            android:onClick="btnClick"            android:text="开始" />        <Button            android:id="@+id/button2"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginTop="8dip"            android:onClick="btnClick"            android:text="暂停" />        <Button            android:id="@+id/button3"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginTop="8dip"            android:onClick="btnClick"            android:text="恢复" />        <Button            android:id="@+id/button4"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginTop="8dip"            android:onClick="btnClick"            android:text="重置" />    </LinearLayout></RelativeLayout>
做出来的初始界面就是这样:

我们接下来就开始把今天下午学的东西理出来吧!

0 0
原创粉丝点击