刨根解牛之Android欢迎页

代码来自于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:修改哪个窗口标志位。
原文地址:https://www.cnblogs.com/smilerong/p/11636726.html