未经本人授权,不得转载!否则必将维权到底
最近我司产品提出了一个很常见的需求: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();
}
开屏页是一个很使用的小需求,我做这个需求的时候,查阅其他的博客,复制的别人的代码,直接跑不通,还报了个稀奇古怪的 bug ,耽误我好一会儿。所以写下此博客供后人方便,有需要的就取走吧。如果觉得对你有帮助,记得点个赞哦~