首页 > 系统 > Android > 正文

Android开屏页倒计时功能实现的详细教程

2019-10-22 18:35:18
字体:
来源:转载
供稿:网友

最近我司产品提出了一个很常见的需求:App 在开屏页(Splash 界面) 需要加上一个 3s 倒计时按钮,可以选择看 3s 的广告,或者点击按钮跳过广告。

Android倒计时的开屏,android倒计时功能,Android开屏页倒计时

一、布局实现(使用 FrameLayout 悬浮在广告的右上角,显示倒计时的 TextView 的宽高尽量不要写死,要考虑字体很多的情况!!)

  <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 帮我们切图

<?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

  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 实现)

  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 跳过");    }  }

五、根据具体的业务逻辑完整实现

  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 销毁)

  @Override  protected void onDestroy() {    if (mCountDownTimer != null) {      mCountDownTimer.cancel();    }    super.onDestroy();  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表