android 倒计时控件

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

java 复制代码
/**
 * 倒计时秒数
 *
 * @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;
    }

}
相关推荐
debug_cat9 分钟前
AndroidStudio Ladybug中编译完成apk之后定制名字kts复制到指定目录
android·android studio
编程洪同学4 小时前
Spring Boot 中实现自定义注解记录接口日志功能
android·java·spring boot·后端
氤氲息6 小时前
Android 底部tab,使用recycleview实现
android
Clockwiseee7 小时前
PHP之伪协议
android·开发语言·php
小林爱7 小时前
【Compose multiplatform教程08】【组件】Text组件
android·java·前端·ui·前端框架·kotlin·android studio
小何开发8 小时前
Android Studio 安装教程
android·ide·android studio
开发者阿伟8 小时前
Android Jetpack LiveData源码解析
android·android jetpack
weixin_438150999 小时前
广州大彩串口屏安卓/linux触摸屏四路CVBS输入实现同时显示!
android·单片机
CheungChunChiu9 小时前
Android10 rk3399 以太网接入流程分析
android·framework·以太网·eth·net·netd
木头没有瓜10 小时前
ruoyi 请求参数类型不匹配,参数[giftId]要求类型为:‘java.lang.Long‘,但输入值为:‘orderGiftUnionList
android·java·okhttp