android 倒计时控件

 效果:(可不设置 之前、之后文字)


/**
 * 倒计时秒数
 *
 * @desc : 时分秒倒计时view
 * 
 * 布局里引用后,
 *     private fun testMethod(){
 *         binding.test.setCDownStarText("之前的文字")
 *         binding.test.setCDownEndText("之后的文字")
 *         binding.test.setCDownDuration(86400*4*1000)//4天
 *         binding.test.setShowUnit(true)//显示倒计时 单位
 *         binding.test.setCountDownFinishListener {
 *             Log.e("测试","倒计时完成")
 *         }
 *     }
 */
public class CountDownTextView extends AppCompatTextView {

    //是否显示倒计时单位,默认不展示
    private boolean mShowUnit;
    private CountDownTimer mCountDownTimer;
    //倒计时 前方展示的文字
    private String mCDownStarText = "";
    //倒计时 后方展示的文字
    private String mCDownEndText = "";
    //倒计时文字 颜色
    private int mCDownTextColor = getResources().getColor(R.color.jiuytguhygtf_rvtygtfrdx_purphuygtyppp);


    public CountDownTextView(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
    }


    public void setCDownDuration(long duration) {
        if (mCountDownTimer != null) {
            mCountDownTimer.cancel();
        }

        mCountDownTimer = new CountDownTimer(duration, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                long secondsNum = (millisUntilFinished / 1000) % 60;
                long minutesNum = (millisUntilFinished / (1000 * 60)) % 60;
                long hourNum = (millisUntilFinished / (1000 * 60 * 60)) % 24;
                long dayNum = (millisUntilFinished / (1000 * 60 * 60 * 24));

//                Log.e("测试", "毫秒值 =" + millisUntilFinished + " 天 =" + dayNum + " 时 =" + hourNum + " 分 =" + minutesNum + " 秒 =" + secondsNum);

                String countDownText = "";//天时分秒
                if (mShowUnit) {
                    //-------------------国内简单使用----------------------
                    countDownText = String.format("%d天%02d小时%02d分%02d秒", dayNum, hourNum, minutesNum, secondsNum);//时分秒

//                    //-------------------国际化使用----------------------
//                    String day = Kwxecrvtbygtfrdesdrf.Companion.get().getString(R.string.day);
//                    String hour = Kwxecrvtbygtfrdesdrf.Companion.get().getString(R.string.hour);
//                    String minutes = Kwxecrvtbygtfrdesdrf.Companion.get().getString(R.string.minutes);
//                    String seconds = Kwxecrvtbygtfrdesdrf.Companion.get().getString(R.string.seconds);
//
//                    countDownText = String.format(("%d" + day + "%02d" + hour + "%02d" + minutes + "%02d" + seconds), dayNum, hourNum, minutesNum, secondsNum);//时分秒
//                    //-------------------国际化使用----------------------
                } else {
                    countDownText = String.format("%d:%02d:%02d:%02d", dayNum, hourNum, minutesNum, secondsNum);//时分秒
                }
                SpannableStringBuilder spannableSb = new SpannableStringBuilder(mCDownStarText + countDownText + mCDownEndText);
                ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(mCDownTextColor);
                spannableSb.setSpan(foregroundColorSpan, mCDownStarText.length(), mCDownStarText.length() + countDownText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

                setText(spannableSb);
            }

            @Override
            public void onFinish() {
                setText(mCDownStarText + mCDownEndText);

                if (mCountDownFinishListener != null) {
                    mCountDownFinishListener.countDownFinishListener();
                }
                if (mCountDownTimer != null) {
                    mCountDownTimer.cancel();
                }
            }
        };

        mCountDownTimer.start();
    }

    /**
     * 是否显示倒计时单位
     *
     * @param showUnit
     */
    public void setShowUnit(boolean showUnit) {
        mShowUnit = showUnit;
    }

    /**
     * 倒计时文字 颜色
     *
     * @param textColor
     */
    public void setCDownTextColor(int textColor) {
        mCDownTextColor = textColor;
    }

    /**
     * 倒计时 前方展示的文字(可不设置)
     *
     * @param starText
     */
    public void setCDownStarText(String starText) {
        mCDownStarText = starText;
    }

    /**
     * 倒计时 后方展示的文字(可不设置)
     *
     * @param endText
     */
    public void setCDownEndText(String endText) {
        mCDownEndText = endText;
    }

    /**
     * 倒计时完成监听回调
     */
    private CountDownFinishListener mCountDownFinishListener;

    public interface CountDownFinishListener {
        void countDownFinishListener();
    }

    public void setCountDownFinishListener(CountDownFinishListener listener) {
        this.mCountDownFinishListener = listener;
    }

}

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android提供了CountDownTimer类可以用于倒计时,以下是一个简单的示例: 首先,在xml布局文件中添加一个TextView用于显示倒计时: ``` <TextView android:id="@+id/tv_countdown" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="24sp" android:textColor="@android:color/black" android:layout_centerInParent="true" /> ``` 然后,在Activity中实现CountDownTimer类,在onTick()方法中更新TextView的值,在onFinish()方法中处理倒计时结束的逻辑: ``` public class MainActivity extends AppCompatActivity { private TextView tvCountdown; private CountDownTimer countDownTimer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvCountdown = findViewById(R.id.tv_countdown); // 倒计时60秒,每秒更新一次 countDownTimer = new CountDownTimer(60 * 1000, 1000) { @Override public void onTick(long millisUntilFinished) { // 更新TextView的值 tvCountdown.setText(String.valueOf(millisUntilFinished / 1000)); } @Override public void onFinish() { // 处理倒计时结束的逻辑 tvCountdown.setText("倒计时结束"); } }.start(); // 开始倒计时 } @Override protected void onDestroy() { super.onDestroy(); // 取消倒计时 countDownTimer.cancel(); } } ``` 以上就是一个简单的倒计时控件实现。注意,在Activity销毁时要取消倒计时,避免内存泄漏。 ### 回答2: Android倒计时控件是一种用于实现倒计时功能的UI控件。它可以在界面上显示剩余时间,并根据设定的时间间隔更新显示内容,直到倒计时结束。 Android倒计时控件一般使用CountDownTimer类来实现。我们可以在页面上创建一个TextView用于显示倒计时的时间,然后创建一个CountDownTimer对象,并重写其onTick()和onFinish()方法来更新倒计时的显示。在onTick()方法中,我们可以通过计算剩余时间来更新TextView的内容,在onFinish()方法中,可以执行倒计时结束后的操作。 使用Android倒计时控件,我们可以方便地实现各种倒计时功能。例如,我们可以在游戏中使用它来显示回合剩余时间,或者在活动中使用它来显示活动倒计时。我们还可以根据不同的需求自定义倒计时的样式和显示内容,使其更符合我们的设计要求。 总的来说,Android倒计时控件是一种非常实用的UI控件,可以方便地实现倒计时功能,并且可以根据需要进行定制。无论是在游戏中还是在一些需要倒计时功能的应用场景中,它都能够为用户提供良好的体验和交互。 ### 回答3: Android倒计时控件是一种可以用于实现倒计时功能的控件倒计时是指从一个固定的时间开始,倒数到0的过程。在Android开发中,倒计时控件通常用于实现一些具有时效性的功能,比如短信验证码倒计时、限时抢购倒计时等。 Android提供了一些内置的倒计时控件,例如CountDownTimer。使用CountDownTimer控件可以很方便地实现倒计时功能。在使用CountDownTimer时,我们需要重写其onTick()方法和onFinish()方法,分别用来更新倒计时的显示和在倒计时结束时执行相应的操作。 除了内置的CountDownTimer外,也可以通过自定义控件来实现倒计时功能。自定义倒计时控件的实现方式较灵活,可以根据具体需求进行设计。通常,自定义倒计时控件需要继承自View或其子类,重写相关的方法来实现倒计时的逻辑。可以通过Handler、Timer或借助系统提供的计时器类来实现倒计时的功能。 总之,Android倒计时控件是一种用于实现倒计时功能的控件。通过内置的CountDownTimer或自定义控件的方式,可以在Android开发中很方便地使用倒计时功能,实现一些与时间有关的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值