Android学习笔记:实现app启动界面跳过倒计时功能

实现app启动界面跳过倒计时功能

1.背景

在平常的开发应用中,我们常常需要设计一个app的启动界面,它没有标题栏,只显示3到5秒后直接跳转,或是用户可以选择直接跳转。这一功能广泛应用于各个app当中,特别是显示广告的时候。所以我们也来学习一下如何实现这一功能。

2.效果图

在这里插入图片描述

3.布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/mainbg">

    <TextView
        android:id="@+id/skip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:textColor="#ffffff"
        android:text="跳过( 3s )"/>

</RelativeLayout>

说明:这里使用的不是Button而是TextView, 两者同样可以配置监听器监听用户的点击动作,后者在于没有按钮背景的设置,更适合我们放在启动界面,否则按钮背景将严重影响美观。

4. 主要代码
package com.example.mycompus;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class WelcomeActivity extends AppCompatActivity {

    private TextView skip;
    private int TIME = 3;
    private boolean isSkip = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        skip = (TextView)findViewById(R.id.skip);

        // 将欢迎界面系统自带的标题栏隐藏
        ActionBar actionBar = getSupportActionBar();
        if(actionBar != null) {
            actionBar.hide();
        }

        final Handler handler = new Handler() {
            @Override
            public void handleMessage(@NonNull Message msg) {
                switch (msg.what) {
                    case -2:
                        skip.setText("跳过( "+TIME+"s )");
                        break;
                    case 1:
                        // 这里记得要判断是否选择跳过,防止重复加载LoginActivity
                        if (!isSkip) {
                            Intent intent = new Intent(WelcomeActivity.this, LonginActivity.class);
                            startActivity(intent);
                            isSkip = true;
                            WelcomeActivity.this.finish();
                        }
                        break;
                }
            }
        };

       new Thread(new Runnable() {  // 开启一个线程倒计时
            @Override
            public void run() {
                for (; TIME>0; TIME--){
                    handler.sendEmptyMessage(-2);
                    if (TIME<=0)
                        break;
                    try {
                        Thread.sleep(1000);
                    }catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                handler.sendEmptyMessage(1);
            }
        }).start();


        skip.setOnClickListener(new View.OnClickListener() {  // 设置跳过按键的监听器
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(WelcomeActivity.this, LonginActivity.class);
                startActivity(intent);
                isSkip = true;
                WelcomeActivity.this.finish();
            }
        });
    }
}

说明: 这个部分,我们一开始先使用hide()方法将系统自带的标题栏隐藏掉。然后为了实现倒计时功能,我们需要开启一个线程,另外我们需要创建一个Handle,用于在主线程更改界面的信息(也即更改倒计时的显示)。这里说明一下,耗时操作需要开启子线程,更改界面信息的操作需要在主线程进行,这样做是为了避免线程阻塞。

然后,我们还要写一个监听器,用于监听用户的点击动作。

这里需要注意的是:当计时结束后,我们需要判断一下是否已经跳转到登录界面了,如果已经跳转了,就不能在startActivity了,不然将会出现从登录界面退出要按两次back键的情况。

ps: 新手总结,欢迎大家批评指正,不胜感激。

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kim‘s blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值