这里有新鲜出炉的精品教程,程序狗速度看过来!
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
本篇文章主要介绍了 Android 实现开屏页倒计时功能实现的详细教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
最近我司产品提出了一个很常见的需求:App 在开屏页(Splash 界面) 需要加上一个 3s 倒计时按钮,可以选择看 3s 的广告,或者点击按钮跳过广告。
一、布局实现 (使用 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();
- }
来源: http://www.phperz.com/article/17/0628/336125.html