本文实例为大家分享了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>
完美实现,直接用就可以了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自学编程网。