效果:(可不设置 之前、之后文字)
/*** 倒计时秒数** @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) {@Overridepublic 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);}@Overridepublic 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;}}