android实现倒计时功能的方法
程序员文章站
2024-03-06 21:16:50
前言
在打开爱奇艺等app的欢迎界面的时候,右上角有一个倒计时的控件。倒计时完了以后进入主界面。现在我们来实现这个功能。
方...
前言
在打开爱奇艺等app的欢迎界面的时候,右上角有一个倒计时的控件。倒计时完了以后进入主界面。现在我们来实现这个功能。
方法一:
利用java的类timer,timertask还有android的handler
界面welcome_activity.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:layout_width="match_parent" android:layout_height="match_parent"> <textview android:id="@+id/count_down" android:layout_width="60dp" android:layout_height="60dp" android:layout_alignparentright="true" android:layout_alignparenttop="true" android:layout_marginright="16dp" android:layout_margintop="16dp" android:gravity="center" android:textsize="32sp" android:textcolor="#50000000" android:background="@drawable/count_down_background" tools:text="2" /> </relativelayout>
package com.example.counttimer; import java.util.date; import java.util.timer; import java.util.timertask; import android.app.activity; import android.content.intent; import android.os.bundle; import android.os.handler; import android.view.menu; import android.view.menuitem; import android.view.window; import android.widget.textview; public class welcomeactivity extends activity { private final static int count = 1; private textview countdown; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); requestwindowfeature(window.feature_no_title); setcontentview(r.layout.activity_welcome); initview(); } //sehedule的第而个参数是第一次启动延时的时间,第三个是每隔多长时间执行一次。单位都是ms。 //因此这里是每一秒发送一次消息给handler更新ui。 //然后三秒后时间到了,在timer的第二个sehedule中进行跳转到另外一个界面 private void initview() { countdown = (textview) findviewbyid(r.id.count_down); final timer timer = new timer(); final long end = system.currenttimemillis() + 1000*3; timer.schedule(new timertask() { @override public void run() { handler.sendemptymessage(count); } }, 0, 1000); //这里的schedule的第二个参数意义是到了这个时间尽快运行run里面的方法 timer.schedule(new timertask() { @override public void run() { intent i = new intent(welcomeactivity.this, secondactivity.class); i.addflags(intent.flag_activity_clear_task); startactivity(i); finish(); timer.cancel(); } }, new date(end)); } private handler handler = new handler(){ int num = 2; public void handlemessage(android.os.message msg) { switch (msg.what) { case count: countdown.settext(string.valueof(num)); num--; break; default: break; } }; }; }
count_down_background.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="8dp"/> <solid android:color="#1e000000"/> </shape>
还有另外的一个空的activity就不贴出来了
效果如下:倒计时到0进入secondactivity
方法二 :
利用android封装的类countdowntimer。其实内部也是用handler实现的。其他都一样。
package com.example.counttimer; import android.app.activity; import android.content.intent; import android.os.bundle; import android.os.countdowntimer; import android.view.window; import android.widget.textview; public class welcomeactivity extends activity { private final static int count = 1; private textview countdown; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); requestwindowfeature(window.feature_no_title); setcontentview(r.layout.activity_welcome); initview(); } private void initview() { countdown = (textview) findviewbyid(r.id.count_down); //countdowntimer构造器的两个参数分别是第一个参数表示总时间,第二个参数表示间隔时间。 //意思就是每隔xxx会回调一次方法ontick,然后xxx之后会回调onfinish方法。 countdowntimer timer = new countdowntimer(3200,1000) { int num = 2; @override public void ontick(long millisuntilfinished) { countdown.settext(string.valueof(num)); num--; } @override public void onfinish() { //计时完成调用 intent i = new intent(welcomeactivity.this, secondactivity.class); i.addflags(intent.flag_activity_clear_task); startactivity(i); finish(); } }; timer.start(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: java8中lamba表达式的使用
下一篇: Arrays类的使用