Android開屏頁倒計(jì)時功能實(shí)現(xiàn)的詳細(xì)教程
最近我司產(chǎn)品提出了一個很常見的需求:App 在開屏頁(Splash 界面) 需要加上一個 3s 倒計(jì)時按鈕,可以選擇看 3s 的廣告,或者點(diǎn)擊按鈕跳過廣告。

一、布局實(shí)現(xiàn)(使用 FrameLayout 懸浮在廣告的右上角,顯示倒計(jì)時的 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 用系統(tǒng) shape 實(shí)現(xiàn),不需要 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() 里面找到顯示倒計(jì)時的 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);
}
四、倒計(jì)時實(shí)現(xiàn)(使用 Android 系統(tǒng)原生的倒計(jì)時控件 CountDownTimer 實(shí)現(xiàn))
class MyCountDownTimer extends CountDownTimer {
/**
* @param millisInFuture
* 表示以「 毫秒 」為單位倒計(jì)時的總數(shù)
* 例如 millisInFuture = 1000 表示1秒
*
* @param countDownInterval
* 表示 間隔 多少微秒 調(diào)用一次 onTick()
* 例如: countDownInterval = 1000 ; 表示每 1000 毫秒調(diào)用一次 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 跳過");
}
}
五、根據(jù)具體的業(yè)務(wù)邏輯完整實(shí)現(xiàn)
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 跳過");
//創(chuàng)建倒計(jì)時類
mCountDownTimer = new MyCountDownTimer(3000, 1000);
mCountDownTimer.start();
//這是一個 Handler 里面的邏輯是從 Splash 界面跳轉(zhuǎn)到 Main 界面,這里的邏輯每個公司基本上一致
tmpHandler.postDelayed(runnable, 3000);
} else {
mCountDownTextView.setText("1s 跳過");
mCountDownTimer = new MyCountDownTimer(1000, 1000);
mCountDownTimer.start();
tmpHandler.postDelayed(runnable, 1000);
}
}
六、注意事項(xiàng)(一定記得在界面銷毀的時候?qū)?CountDownTimer 銷毀)
@Override
protected void onDestroy() {
if (mCountDownTimer != null) {
mCountDownTimer.cancel();
}
super.onDestroy();
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android 逆向?qū)W習(xí)詳解及實(shí)例
- 使用android-apktool來逆向(反編譯)APK包方法介紹
- 通過FancyView提供 Android 酷炫的開屏動畫實(shí)例代碼
- Android仿知乎日報(bào)開屏頁效果
- Android 監(jiān)聽鎖屏、解鎖、開屏 功能代碼
- Android實(shí)現(xiàn)加載廣告圖片和倒計(jì)時的開屏布局
- Android使用ViewPager實(shí)現(xiàn)滾動廣告
- Android實(shí)現(xiàn)自適應(yīng)屏幕的彈窗廣告
- Android Viewpager實(shí)現(xiàn)輪播廣告圖
- Android 知乎廣告效果實(shí)現(xiàn)代碼
- Android逆向技巧——去除開屏廣告
相關(guān)文章
Android獲取RecyclerView滑動距離方法詳細(xì)講解
RecyclerView是Android一個更強(qiáng)大的控件,其不僅可以實(shí)現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實(shí)現(xiàn)數(shù)據(jù)縱向滾動,也可以實(shí)現(xiàn)橫向滾動(ListView做不到橫向滾動)。接下來講解RecyclerView的用法2023-01-01
Android貝塞爾曲線實(shí)現(xiàn)消息拖拽消失
這篇文章主要為大家詳細(xì)介紹了Android貝塞爾曲線實(shí)現(xiàn)消息拖拽消失,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01
關(guān)于Android內(nèi)存緩存LruCache的使用及其源碼解析
LruCache作為內(nèi)存緩存,使用強(qiáng)引用方式緩存有限個數(shù)據(jù),當(dāng)緩存的某個數(shù)據(jù)被訪問時,它就會被移動到隊(duì)列的頭部,本文詳細(xì)介紹了關(guān)于Android內(nèi)存緩存LruCache的使用及其源碼解析,需要的朋友可以參考下2023-05-05
Android開發(fā)之開關(guān)按鈕控件ToggleButton簡單用法示例
這篇文章主要介紹了Android開發(fā)之開關(guān)按鈕控件ToggleButton簡單用法,結(jié)合實(shí)例形式分析了Android開關(guān)按鈕控件ToggleButton的相關(guān)xml布局與調(diào)用操作技巧,需要的朋友可以參考下2017-12-12
Android開發(fā)之ListView的簡單用法及定制ListView界面操作示例
這篇文章主要介紹了Android開發(fā)之ListView的簡單用法及定制ListView界面操作,結(jié)合實(shí)例形式分析了Android ListView界面布局相關(guān)操作技巧,需要的朋友可以參考下2019-04-04
Android編程實(shí)現(xiàn)泡泡聊天界面實(shí)例詳解(附源碼)
這篇文章主要介紹了Android編程實(shí)現(xiàn)泡泡聊天界面,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android泡泡聊天界面的窗體定義與功能實(shí)現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11
Android BroadcastReceiver實(shí)現(xiàn)網(wǎng)絡(luò)狀態(tài)實(shí)時監(jiān)聽
這篇文章主要為大家詳細(xì)介紹了Android BroadcastReceiver實(shí)現(xiàn)網(wǎng)絡(luò)狀態(tài)實(shí)時監(jiān)聽,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05

