android中 倒计时的使用

在项目中用到了倒计时,格式:00时00分00秒

代码示例:
public class MyCustomDigitalClock extends DigitalClock {

Calendar mCalendar;
private final static String m12 = "h:mm aa";
private final static String m24 = "k:mm";
private FormatChangeObserver mFormatChangeObserver;

private Runnable mTicker;
private Handler mHandler;
private long endTime;
private ClockListener_My mClockListener;

private boolean mTickerStopped = false;

@SuppressWarnings("unused")
private String mFormat;

public MyCustomDigitalClock(Context context) {
    super(context);
    initClock(context);
}

public MyCustomDigitalClock(Context context, AttributeSet attrs) {
    super(context, attrs);
    initClock(context);
}

private void initClock(Context context) {

    if (mCalendar == null) {
        mCalendar = Calendar.getInstance();
    }

    mFormatChangeObserver = new FormatChangeObserver();
    getContext().getContentResolver().registerContentObserver(Settings.System.CONTENT_URI, true, mFormatChangeObserver);

    setFormat();
}

@Override
protected void onAttachedToWindow() {
    mTickerStopped = false;
    super.onAttachedToWindow();
    mHandler = new Handler();

    /**
     * requests a tick on the next hard-second boundary
     */
    mTicker = new Runnable() {
        public void run() {
            if (mTickerStopped)
                return;
            long currentTime = System.currentTimeMillis();
            if (currentTime / 1000 == endTime / 1000 - 5 * 60) {
                mClockListener.remainFiveMinutes();
            }
            long distanceTime = endTime - currentTime;
            distanceTime /= 1000;
            if (distanceTime == 0) {
                setText("00天00时00分00秒");
                onDetachedFromWindow();
                mClockListener.timeEnd();
            } else if (distanceTime < 0) {
                setText("00天00时00分00");
            } else {
                setText(dealTime(distanceTime));
            }
            invalidate();
            long now = SystemClock.uptimeMillis();
            long next = now + (1000 - now % 1000);
            mHandler.postAtTime(mTicker, next);
        }
    };
    mTicker.run();
}

/**
 * deal time string
 * 
 * @param time
 * @return
 */
public static String dealTime(long time) {
    StringBuffer returnString = new StringBuffer();
    long day = time / (24 * 60 * 60);
    long hours = (time % (24 * 60 * 60)) / (60 * 60);
    long minutes = ((time % (24 * 60 * 60)) % (60 * 60)) / 60;
    long second = ((time % (24 * 60 * 60)) % (60 * 60)) % 60;
    String dayStr = String.valueOf(day);
    String hoursStr = timeStrFormat(String.valueOf(hours));
    String minutesStr = timeStrFormat(String.valueOf(minutes));
    String secondStr = timeStrFormat(String.valueOf(second));
    returnString.append(dayStr).append("天").append(hoursStr).append("时").append(minutesStr).append("分").append(secondStr).append("秒");
    return returnString.toString();
}

/**
 * format time
 * 
 * @param timeStr
 * @return
 */
private static String timeStrFormat(String timeStr) {
    switch (timeStr.length()) {
    case 1:
        timeStr = "0" + timeStr;
        break;
    }
    return timeStr;
}

@Override
protected void onDetachedFromWindow() {
    super.onDetachedFromWindow();
    mTickerStopped = true;
}

/**
 * Clock end time from now on.
 * 
 * @param endTime
 */
public void setEndTime(long endTime) {
    this.endTime = endTime;
}

/**
 * Pulls 12/24 mode from system settings
 */
private boolean get24HourMode() {
    return android.text.format.DateFormat.is24HourFormat(getContext());
}

private void setFormat() {
    if (get24HourMode()) {
        mFormat = m24;
    } else {
        mFormat = m12;
    }
}

private class FormatChangeObserver extends ContentObserver {
    public FormatChangeObserver() {
        super(new Handler());
    }

    @Override
    public void onChange(boolean selfChange) {
        setFormat();
    }
}

public void setClockListener_My(ClockListener_My clockListener) {
    this.mClockListener = clockListener;
}

public interface ClockListener_My{
    void timeEnd();
    void remainFiveMinutes();
}

}

1.使用方法
在xml文件中使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio倒计时计时器的源码可以通过以下步骤实现: 1. 创建一个新的Android项目并在MainActivity添加一个TextView组件,用于显示倒计时。 2. 在MainActivity定义一个计时器变量、计时时长和显示倒计时的TextView。 3. 在onCreate()方法初始化计时器变量,以及获取TextView组件的引用。 4. 在onStart()方法启动计时器,并使用适当的间隔(例如1秒)更新显示倒计时的TextView内容。同时,设置计时器的总时长。 这里是源码示例: ``` import android.os.Bundle; import android.os.CountDownTimer; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private CountDownTimer countDownTimer; private long timeLeftInMillis = 300000; // 总时长为5分钟 private TextView countdownTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); countdownTextView = findViewById(R.id.countdownTextView); countDownTimer = new CountDownTimer(timeLeftInMillis, 1000) { @Override public void onTick(long millisUntilFinished) { timeLeftInMillis = millisUntilFinished; updateCountdownText(); } @Override public void onFinish() { // TODO: 计时器结束时的操作 } }; countDownTimer.start(); } @Override protected void onStart() { super.onStart(); countDownTimer.start(); } private void updateCountdownText() { int minutes = (int) (timeLeftInMillis / 1000) / 60; int seconds = (int) (timeLeftInMillis / 1000) % 60; String timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds); countdownTextView.setText(timeLeftFormatted); } } ``` 上述代码在MainActivity创建了一个CountDownTimer对象并在onCreate()方法启动了计时器。在onTick()方法更新了倒计时显示的TextView,并在onFinish()方法定义计时器结束时的操作。updateCountdownText()方法可将剩余的毫秒数转换为分钟和秒,并将其格式化为“分:秒”的形式。 以上是一个简单的Android Studio倒计时计时器的源码示例。你可以根据自己的需求进一步扩展和定制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值