Android 实现倒计时的简单方式
【摘要】
一、布局实现(使用 FrameLayout 悬浮在广告的右上角,显示倒计时的 TextView 的宽高尽量不要写死,要考虑字体很多的情况!!)
<FrameLayout android:id="@+id/start_skip" android:layout_...
一、布局实现(使用 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();
-
}
文章来源: chengsy.blog.csdn.net,作者:程思扬,版权归原作者所有,如需转载,请联系作者。
原文链接:chengsy.blog.csdn.net/article/details/80648689
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)