一个倒计时的效果
先看效果图:

直接上代码:

这里是关于倒计时 …天时分秒…的逻辑判断

/**     * 倒计时计算     */    private void computeTime() {        mSecond--;        if (mSecond < 0) {            mMin--;            mSecond = 59;            if (mMin < 0) {                mMin = 59;                mHour--;                if (mHour < 0) {                    // 倒计时结束                    mHour = 23;                    mDay--;                    if(mDay < 0){                        // 倒计时结束                        mDay = 0;                        mHour= 0;                        mMin = 0;                        mSecond = 0;                    }                }            }        }    }

定时器主要代码如下…当然也可以开线程或者开后台服务来处理…只是没那种必要…定时器就可以搞定容易控制…毕竟倒计时时间起点…你总得后台获取吧,不是做时钟闹钟…如果是做时钟闹钟…拿你也不用考虑后台服务或者自己开线程…而是使用AlarmManager来实现

/**     * 开启倒计时     *  //time为Date类型:在指定时间执行一次。     *        timer.schedule(task, time);     *  //firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。     *       timer.schedule(task, firstTime,period);     *  //delay 为long类型:从现在起过delay毫秒执行一次。     *       timer.schedule(task, delay);     *  //delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。     *       timer.schedule(task, delay,period);     */    private void startRun() {        TimerTask mTimerTask = new TimerTask() {            @Override            public void run() {                Message message = Message.obtain();                message.what = 1;                timeHandler.sendMessage(message);            }        };        mTimer.schedule(mTimerTask,0,1000);    }

修改界面,利用handler来提醒更新界面

 private Handler timeHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (msg.what == 1) {                computeTime();                mDays_Tv.setText(mDay+"");//天数不用补位                mHours_Tv.setText(getTv(mHour));                mMinutes_Tv.setText(getTv(mMin));                mSeconds_Tv.setText(getTv(mSecond));                if (mSecond == 0 &&  mDay == 0 && mHour == 0 && mMin == 0 ) {                    mTimer.cancel();                }            }        }    };    private String getTv(long l){        if(l>=10){            return l+"";        }else{            return "0"+l;//小于10,,前面补位一个"0"        }    }

附带主activity的代码…

import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.RelativeLayout;import android.widget.TextView;import java.util.Timer;import java.util.TimerTask;public class MainActivity extends AppCompatActivity {    private RelativeLayout countDown;    // 倒计时    private TextView mDays_Tv, mHours_Tv, mMinutes_Tv, mSeconds_Tv;    private long mDay = 23;// 天    private long mHour = 11;//小时,    private long mMin = 56;//分钟,    private long mSecond = 32;//秒    private Timer mTimer;    private Handler timeHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (msg.what == 1) {                computeTime();                mDays_Tv.setText(mDay+"");//天数不用补位                mHours_Tv.setText(getTv(mHour));                mMinutes_Tv.setText(getTv(mMin));                mSeconds_Tv.setText(getTv(mSecond));                if (mSecond == 0 &&  mDay == 0 && mHour == 0 && mMin == 0 ) {                    mTimer.cancel();                }            }        }    };    private String getTv(long l){        if(l>=10){            return l+"";        }else{            return "0"+l;//小于10,,前面补位一个"0"        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mTimer = new Timer();        countDown = (RelativeLayout) findViewById(R.id.countdown_layout);        mDays_Tv = (TextView) findViewById(R.id.days_tv);        mHours_Tv = (TextView) findViewById(R.id.hours_tv);        mMinutes_Tv = (TextView) findViewById(R.id.minutes_tv);        mSeconds_Tv = (TextView) findViewById(R.id.seconds_tv);        startRun();    }    /**     * 开启倒计时     *  //time为Date类型:在指定时间执行一次。     *        timer.schedule(task, time);     *  //firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。     *       timer.schedule(task, firstTime,period);     *  //delay 为long类型:从现在起过delay毫秒执行一次。     *       timer.schedule(task, delay);     *  //delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。     *       timer.schedule(task, delay,period);     */    private void startRun() {        TimerTask mTimerTask = new TimerTask() {            @Override            public void run() {                Message message = Message.obtain();                message.what = 1;                timeHandler.sendMessage(message);            }        };        mTimer.schedule(mTimerTask,0,1000);    }    /**     * 倒计时计算     */    private void computeTime() {        mSecond--;        if (mSecond < 0) {            mMin--;            mSecond = 59;            if (mMin < 0) {                mMin = 59;                mHour--;                if (mHour < 0) {                    // 倒计时结束                    mHour = 23;                    mDay--;                    if(mDay < 0){                        // 倒计时结束                        mDay = 0;                        mHour= 0;                        mMin = 0;                        mSecond = 0;                    }                }            }        }    }}

附带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:id="@+id/countdown_layout"                android:layout_width="match_parent"                android:layout_height="match_parent"                android:background="@android:color/white"                android:gravity="center" >    <RelativeLayout        android:id="@+id/daojishi_rl"        android:layout_width="match_parent"        android:layout_height="40.0dip"        android:layout_marginLeft="10.0dip"        android:layout_marginRight="10.0dip"        android:gravity="center" >        <ImageView            android:id="@+id/describe_iv"            android:layout_width="40dp"            android:layout_height="40dp"            android:src="@mipmap/img"            android:scaleType="fitXY"            android:gravity="center_vertical" />        <TextView            android:id="@+id/describe_tv"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:layout_marginRight="5.0dip"            android:layout_toRightOf="@+id/describe_iv"            android:text="距离开团还有"            android:textSize="25sp" />        <TextView            android:id="@+id/days_tv"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:padding="4dp"            android:layout_toRightOf="@+id/describe_tv"            android:background="#c2c2c2"            android:gravity="center"            android:text=""            android:textSize="20sp" />        <TextView            android:id="@+id/colon0"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:layout_marginLeft="5.0dip"            android:layout_marginRight="3.0dip"            android:layout_toRightOf="@+id/days_tv"            android:text=""            android:textSize="20sp"            android:textStyle="bold" />    RelativeLayout>    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@+id/daojishi_rl"        android:gravity="center_horizontal" >        <TextView            android:id="@+id/hours_tv"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:layout_toLeftOf="@+id/colon1"            android:background="#c2c2c2"            android:gravity="center"            android:text="23"            android:padding="3dp"            android:textSize="20sp" />        <TextView            android:id="@+id/colon1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:layout_marginLeft="3.0dip"            android:layout_marginRight="3.0dip"            android:layout_toLeftOf="@+id/minutes_tv"            android:text=":"            android:textSize="20sp"            android:textStyle="bold" />        <TextView            android:id="@+id/minutes_tv"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:layout_toLeftOf="@+id/colon2"            android:background="#c2c2c2"            android:gravity="center"            android:text="59"            android:padding="3dp"            android:textSize="20sp" />        <TextView            android:id="@+id/colon2"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:layout_marginLeft="3.0dip"            android:layout_marginRight="3.0dip"            android:layout_toLeftOf="@+id/seconds_tv"            android:text=":"            android:textSize="20sp"            android:textStyle="bold" />        <TextView            android:id="@+id/seconds_tv"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:layout_centerVertical="true"            android:background="#c2c2c2"            android:gravity="center"            android:text="59"            android:padding="3dp"            android:textSize="20sp" />    RelativeLayout>RelativeLayout>

完美实现,直接用就可以了。

更多相关文章

  1. Android中集成QQ登陆和QQ好友分享及QQ空间分享
  2. android sqlite数据库时间 日期 double等数据类型
  3. cocos2d-x在android中响应返回键编译报错的bug分析
  4. Android:关于onConfigurationChanged()的介绍
  5. Android打开本地相册选取图片并显示在ImageView上
  6. Android(安卓)不明确key时遍历JSONObject
  7. google Android编译本地C++程序方法
  8. 完整的android开发环境搭建和源代码编译过程
  9. 关于Android(安卓)Fragment生命周期以及其他方法的调用执行顺序

随机推荐

  1. Android OpenGL之生成FloatBuffer
  2. android得到系统时间如何判断是白天还是
  3. Android软件限制AP的最大连接数
  4. Android(Java):onChange效果实现
  5. Android EdtiText 添加表情
  6. android(27)(显示意图之打开浏览器)
  7. Android判断文件类型(视频、音频、图片等)
  8. Android 常用工具类封装
  9. Android之SharedPreferences轻量数据存储
  10. 关于android 摄像头 显示方向