Android实现倒计时效果

本文实例为大家分享了Android实现倒计时效果的具体代码,供大家参考,具体内容如下

一个倒计时的效果

先看效果图:

直接上代码:

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

/**

* 倒计时计算

*/

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>

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 Android实现倒计时效果 的全部内容, 来源链接: utcz.com/p/243052.html

回到顶部