前言
在打开爱奇艺等app的欢迎界面的时候,右上角有一个倒计时的控件。倒计时完了以后进入主界面。现在我们来实现这个功能。
方法一:
利用java的类timer,timertask还有android的handler
界面welcome_activity.xml
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
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"
/>
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
android:shape="rectangle">
android:radius="8dp"/>
android:color="#1e000000"/>
还有另外的一个空的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();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。