代码来自于https://www.cnblogs.com/yandashan666/p/10418911.html?tdsourcetag=s_pcqq_aiomsg
package com.example.lenovo.tallybook;
import android.content.Intent;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private int recLen = 5;//跳过倒计时提示5秒
private Button mBtn;
Timer timer = new Timer();
private Handler handler;
private Runnable runnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//flag使我们必须要设置的变量
int flag = WindowManager.LayoutParams.FLAG_FULLSCREEN;
//设置当前窗体为全屏显示
getWindow().setFlags(flag, flag);
initView();
timer.schedule(task, 1000, 1000);//等待时间一秒,停顿时间一秒
/**
* 正常情况下不点击跳过
*/
handler = new Handler();
handler.postDelayed(runnable = new Runnable() {
@Override
public void run() {
//跳转到首界面
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
startActivity(intent);
finish();
}
}, 5000);//延迟5S后发送handler信息
}
private void initView() {
mBtn = findViewById(R.id.btn_1);//跳过
mBtn.setOnClickListener(this);//跳过监听
}
TimerTask task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() { // UI thread
@Override
public void run() {
recLen--;
mBtn.setText("跳过 " + recLen);//在控件上显示距离跳转的剩余时间
if (recLen < 0) {
timer.cancel();
mBtn.setVisibility(View.GONE);//倒计时到0隐藏字体
}
}
});
}
};
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_1:
//发生点击事件时直接跳转到首界面
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
startActivity(intent);
finish();
if (runnable != null) {
handler.removeCallbacks(runnable);
}
break;
default:
break;
}
}
}
代码的解读
1.Timer类
- java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks。
- 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类的方式创建。
import java.util.Timer;
Timer timer = new Timer(true);
TimerTask task = new TimerTask() {
public void run() {
... //每次需要执行的代码放到这里面。
}
};
2.runOnUiThread
runOnUiThread(new Runnable() { // UI thread
- 利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。
- Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程。
3.getWindow.setFlags(设置当前窗体全屏)
int flag = WindowManager.LayoutParams.FLAG_FULLSCREEN; //设置当前窗体为全屏显示
getWindow().setFlags(flag, flag);
方法 | 解释 |
---|---|
getWindow() | Activity 中的一个方法,获取当前的window |
setFlags(int flags,int mask) | 根据标志设置窗口的WindowManager.LayoutParams标志。flags:新窗口的标志 mask:修改哪个窗口标志位。 |