Android 实现倒计时的简单方式

简介: Android 实现倒计时的简单方式
一、布局实现(使用 FrameLayout 悬浮在广告的右上角,显示倒计时的 TextView 的宽高尽量不要写死,要考虑字体很多的情况!!)
1.    <FrameLayout
        android:id="@+id/start_skip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true">
        <TextView
            android:id="@+id/start_skip_count_down"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/default_padding"
            android:text="@string/click_to_skip"
            android:gravity="center"
            android:background="@drawable/bg_start_page_circle"
            android:textColor="@android:color/white"
            android:textSize="14sp"
            />
    </FrameLayout>
二、TextView 背景的 @drawable/bg_start_page_circle 用系统 shape 实现,不需要 UI 帮我们切图
1.<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <solid android:color="#80000000"/>
    <padding
        android:bottom="3dp"
        android:left="8dp"
        android:right="8dp"
        android:top="3dp"/>
    <corners
        android:bottomLeftRadius="45dp"
        android:bottomRightRadius="45dp"
        android:topLeftRadius="45dp"
        android:topRightRadius="45dp"/>
</shape>
三、在 onCreate() 里面找到显示倒计时的 TextView
1.    private TextView mCountDownTextView;
  /**
     * Created by KeithXiaoY on 2017/06/07.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        mCountDownTextView = (TextView) findViewById(R.id.start_skip_count_down);
四、倒计时实现(使用 Android 系统原生的倒计时控件 CountDownTimer 实现)
1.    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() {
            mCountDownTextView.setText("0s 跳过");
        }
        public void onTick(long millisUntilFinished) {
            mCountDownTextView.setText( millisUntilFinished / 1000 + "s 跳过");
        }
    }
五、根据具体的业务逻辑完整实现
1.    private TextView mCountDownTextView;
    private MyCountDownTimer mCountDownTimer;
  /**
     * Created by KeithXiaoY on 2017/06/07.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...
        mCountDownTextView = (TextView) findViewById(R.id.start_skip_count_down);
            //我司需求,在没有 Banner 广告的时候一秒跳过开屏页,有 Banner 广告的时候三秒跳过
        if (PreferencesFactory.getCommonPref().getBoolean(CommonPreferences.PREFS_HAS_START_PAGE_BANNER, false)) {
            mCountDownTextView.setText("3s 跳过");
            //创建倒计时类
            mCountDownTimer = new MyCountDownTimer(3000, 1000);
            mCountDownTimer.start();
            //这是一个 Handler 里面的逻辑是从 Splash 界面跳转到 Main 界面,这里的逻辑每个公司基本上一致
            tmpHandler.postDelayed(runnable, 3000);
        } else {
            mCountDownTextView.setText("1s 跳过");
            mCountDownTimer = new MyCountDownTimer(1000, 1000);
            mCountDownTimer.start();
            tmpHandler.postDelayed(runnable, 1000);
        }
六、注意事项(一定记得在界面销毁的时候将 CountDownTimer 销毁)
1.    @Override
    protected void onDestroy() {
        if (mCountDownTimer != null) {
            mCountDownTimer.cancel();
        }
        super.onDestroy();
    }
目录
相关文章
|
Android开发
flutter中实现仿Android端的onResume和onPause方法
flutter中实现仿Android端的onResume和onPause方法
|
Android开发
Android 短信验证码倒计时60s实现步骤
Android 短信验证码倒计时60s实现步骤
195 0
|
Android开发 Kotlin
Android 基于Kotlin Flow实现一个倒计时功能
`Flow`数据流可以按顺序发送多个值,一个倒计时功能刚好符合这种场景,本文就尝试使用`Flow`来实现一个倒计时功能
410 0
|
缓存 JSON Java
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
389 1
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
|
编解码 Android开发
性能优化:Android中Bitmap内存大小优化的几种常见方式
性能优化:Android中Bitmap内存大小优化的几种常见方式
|
Android开发 容器
Android实现面包屑效果,支持Fragment联动
Android实现面包屑效果,支持Fragment联动
|
Android开发
Android实现连线题效果
Android实现连线题效果
|
移动开发 JavaScript Android开发
通过howler.js实现在Android下的微信浏览器自动播放音频
通过howler.js实现在Android下的微信浏览器自动播放音频
480 0
通过howler.js实现在Android下的微信浏览器自动播放音频
|
数据库 Android开发
android 多级下拉菜单实现教程 greendao使用
android 多级下拉菜单实现教程 greendao使用
203 0
android 多级下拉菜单实现教程 greendao使用
|
监控 前端开发 Java
Android自定义控件(十)——SurfaceView实战实现天气APP背景移动效果
Android自定义控件(十)——SurfaceView实战实现天气APP背景移动效果
414 0