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;
    }

}
相关推荐
烬奇小云3 小时前
认识一下Unicorn
android·python·安全·系统安全
顾北川_野15 小时前
Android 进入浏览器下载应用,下载的是bin文件无法安装,应为apk文件
android
CYRUS STUDIO15 小时前
Android 下内联汇编,Android Studio 汇编开发
android·汇编·arm开发·android studio·arm
右手吉他15 小时前
Android ANR分析总结
android
PenguinLetsGo17 小时前
关于 Android15 GKI2407R40 导致梆梆加固软件崩溃
android·linux
杨武博19 小时前
音频格式转换
android·音视频
音视频牛哥21 小时前
Android音视频直播低延迟探究之:WLAN低延迟模式
android·音视频·实时音视频·大牛直播sdk·rtsp播放器·rtmp播放器·android rtmp
ChangYan.1 天前
CondaError: Run ‘conda init‘ before ‘conda activate‘解决办法
android·conda
二流小码农1 天前
鸿蒙开发:ForEach中为什么键值生成函数很重要
android·ios·harmonyos
夏非夏1 天前
Android 生成并加载PDF文件
android