Android中使用Handler及Countdowntimer实现包含倒计时的闪屏页面
作者:潘侯爷 发布时间:2023-01-21 19:05:08
标签:android,handler,倒计时,countdownview
上一篇博文《Android中Handler使用浅析》通过实现倒计时闪屏页面的制作引出了Handler的使用方法以及实现原理,博文末尾也提到了实现过程中的Bug,有兴趣的朋友可以点击链接回去看看。今天通过使用Handler以及CountDownTimer来实现完整版的倒计时闪屏(不会出现在退出闪屏页后,依然会跳转页面的现象)。
1. 实现效果如下:
1.1 正常进入跳转的效果以及log显示
1.2 倒计时未结束时退出以及log显示
对比上篇博文的实现,退出后计时停止且不会再跳到新的界面
2. 实现方法
2.1 去除actionBar
闪屏页面一般都为全屏显示,这里我们首先需要去除actionBar,在res/values/styles.xml中设置:
这里也建议大家在后期开发中尽量不要用死板的actionBar,可以根据项目需求使用ToolBar或者自定义TitleBar组件来替代actionBar,这样的话界面设计会更加灵活。
2.2 layout布局
这里仅仅设置布局背景图片,以及在右上角添加TextView用于显示倒计时,做的有点糙,见谅,代码如下:
<?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:id="@+id/activity_splash"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/background_login"
tools:context="com.mly.panhouye.handlerdemo.SplashActivity">
<TextView
android:gravity="right"
android:id="@+id/tv_time"
android:textColor="@color/colorAccent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SS"
android:textSize="30sp"/>
</RelativeLayout>
2.3 java实现代码
2.1中只是去除了app的ActionBar,要做的全屏显示,仍需要在activity中使用代码设置。
package com.mly.panhouye.handlerdemo;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
public class SplashActivity extends AppCompatActivity {
private MyHandler myHandler = new MyHandler();
private TextView tv_time;
private MyCountDownTimer mc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置Activity为全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//去标题状态栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash);
tv_time = (TextView) findViewById(R.id.tv_time);
mc = new MyCountDownTimer(5000, 1000);
mc.start();
/**
* 使用handler的postDelayed延迟5秒执行页面跳转
* (与CountDownTimer的millisInFuture一致)
*/
myHandler.postDelayed(new Runnable() {
@Override
public void run() {
startMainActivity();
}
},5000);
}
//将Handler声明为静态内部类
private static class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
}
//页面跳转的方法
private void startMainActivity(){
Intent intent = new Intent(this,Main3Activity.class);
startActivity(intent);
finish();//完成跳转后销毁闪屏页(从栈内移除)
}
class MyCountDownTimer extends CountDownTimer {
/**
* @param millisInFuture
* 表示以毫秒为单位 倒计时的总数
* 例如 millisInFuture=1000 表示1秒
* @param countDownInterval
* 表示 间隔 多少微秒 调用一次 onTick 方法
* 例如: countDownInterval =1000 ; 表示每1000毫秒调用一次onTick()
*/
public MyCountDownTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
public void onFinish() {
tv_time.setText("正在跳转");
}
public void onTick(long millisUntilFinished) {
tv_time.setText("倒计时(" + millisUntilFinished / 1000 + ")");
Log.i("tag","倒计时"+millisUntilFinished / 1000);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//闪屏页销毁时将消息对象从消息队列移除并结束倒计时
myHandler.removeCallbacksAndMessages(null);
mc.cancel();
Log.i("tag","destory");
}
}
以上所述是小编给大家介绍的Android中使用Handler及Countdowntimer实现包含倒计时的闪屏页面,希望对大家有所帮助!
来源:http://www.cnblogs.com/panhouye/archive/2017/03/04/6501600.html


猜你喜欢
- 依赖让我们先把 zip4j 依赖关系添加到我们的 pom.xml 文件中。<dependenc
- 前言前面说到在我们应对高并发的场景,请求量过于大的情况下给我们服务器的压力很多,造成缓存穿透、击穿、雪崩,那么我们采用布隆过滤器,有兴趣的小
- Retrofit 基本使用implementation 'com.squareup.retrofit2:retrofit:2.9.0
- 如下所示:public static String reThreeStr(String ss){boolean result= ss.mat
- 计算两点之间的距离然后在控制台输出,这个题目还是挺简单的。下面我们来看看具体代码。package com.swift;import java
- Spring事务传递机制原理首先,我们通过org.springframework.transaction.annotation.Propag
- Android 关闭多个Activity的实现方法总的来说有四种方法:1、使用Application来进行关闭public class Ap
- MyBatis核心配置文件<?xml version="1.0" encoding="UTF-8&quo
- 本文实例讲述了散列表的原理与Java实现方法。分享给大家供大家参考,具体如下:概述符号表是一种用于存储键值对(key-value pair)
- 模式介绍命令模式(Command Pattern) :在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被
- application.properties大家都不陌生,我们在开发的时候,经常使用它来配置一些可以手动修改而且不用编译的变量,这样的作用在
- 1. 通过字节流实现文件的拷贝 /** * 通过字节流实现文件的拷贝 * @param sourcePath 源
- 前言这篇文章介绍如何使用Springboot+Junit+Mockito做单元测试,案例选取撮合交易的一个类来做单元测试。单元测试前先理解需
- 最近在用ssm框架做一个管理系统,做到登录验证时,使用了下面的代码生成图片验证码,最终的效果如下图。Java类public class Ra
- 安装完jdk环境后,编写第一个java程序hello.java:public class hello{
- Java关系操作符简写介绍eq--等于、neq--不等于、lt--小于、lte--小于等于、gt--大于、gte--大于等于、e
- 摘要:本文演示如何构建起一个优秀的后端接口体系,体系构建好了自然就有了规范,同时再构建新的后端接口也会十分轻松。一个后端接口大致分为四个部分
- 一、实验题目二、分析实验要求为:实现一个界面,界面中包含一个文本显示区和两个按钮(存档和读档)读档按钮作用是打开文件并读取内容,将内容显示在
- 2015年Google IO大会分布了DataBinding库,能够更快捷便利的实现MVVM结构模式。但是,通过对DataBinding的学
- 自定义过滤器获取不到session根本原因,多个自定义过滤器执行顺序问题问题action请求中request对象为ShiroHttpServ