星空数独开发总结(八):进度条和倒计时

采用条形进度条,上方有10分钟倒计时

系统默认进度条形状圆形,在xml文件中设置

android:visibility="visible"//设置可见
style="@android:style/Widget.ProgressBar.Horizontal"//条形

倒计时的话推荐我在github上偷的utils,贼好用

//主要部分

package test.bird.starrysky_sudoku;

import android.os.CountDownTimer;

/**
 * created 2017/5/16 11:32
 */
public class CountDownTimerSupport implements ITimerSupport {

    private final long DEFAULT_MILLIS_FUTURE = 60000;
    private final long DEFAULT_COUNT_DOWN_INTERVAL = 1000;

    private CountDownTimer mTimer;
    /**
     * 倒计时时间
     */
    private long mMillisInFuture = DEFAULT_MILLIS_FUTURE;
    /**
     * 间隔时间
     */
    private long mCountDownInterval = DEFAULT_COUNT_DOWN_INTERVAL;
    /**
     * 倒计时剩余时间
     */
    private long mMillisUntilFinished;

    private OnCountDownTimerListener mOnCountDownTimerListener;

    private TimerState mTimerState = TimerState.FINISH;

    public CountDownTimerSupport() {

    }

    public CountDownTimerSupport(long millisInFuture, long countDownInterval) {
        this.mMillisInFuture = millisInFuture;
        this.mCountDownInterval = countDownInterval;
    }

    @Override
    public void start() {
        if (mTimerState != TimerState.START) {
            if (mTimer == null) {
                reset();
            }
            mTimer.start();
            mTimerState = TimerState.START;
        }
    }

    @Override
    public void pause() {
        if (mTimer != null && mTimerState == TimerState.START) {
            mTimer.cancel();
            mTimer = null;
            mTimerState = TimerState.PAUSE;
        }
    }

    @Override
    public void resume() {
        if (mTimerState == TimerState.PAUSE) {
            mTimer = createCountDownTimer(mMillisUntilFinished, mCountDownInterval);
            mTimer.start();
            mTimerState = TimerState.START;
        }
    }

    @Override
    public void stop() {
        if (mTimer != null) {
            mTimer.cancel();
            mTimer = null;
            mMillisUntilFinished = 0;
            mTimerState = TimerState.FINISH;
        }
    }

    @Override
    public void reset() {
        stop();
        mTimer = createCountDownTimer(mMillisInFuture, mCountDownInterval);
    }


    public boolean isStart() {
        return mTimerState == TimerState.START;
    }

    public boolean isFinish() {
        return mTimerState == TimerState.FINISH;
    }

    protected CountDownTimer createCountDownTimer(long millisInFuture, long countDownInterval) {
        return new CountDownTimer(millisInFuture, countDownInterval) {
            @Override
            public void onTick(long millisUntilFinished) {
                mMillisUntilFinished = millisUntilFinished;
                if (mOnCountDownTimerListener != null) {
                    mOnCountDownTimerListener.onTick(mMillisUntilFinished);
                }
            }

            @Override
            public void onFinish() {
                if (mOnCountDownTimerListener != null) {
                    mOnCountDownTimerListener.onFinish();
                }
            }
        };
    }

    public void setMillisInFuture(long millisInFuture) {
        this.mMillisInFuture = millisInFuture;
    }

    public void setCountDownInterval(long countDownInterval) {
        this.mCountDownInterval = countDownInterval;
    }

    public void setOnCountDownTimerListener(OnCountDownTimerListener listener) {
        this.mOnCountDownTimerListener = listener;
    }

    public long getMillisUntilFinished() {
        return mMillisUntilFinished;
    }

    public TimerState getTimerState() {
        return mTimerState;
    }
}


//接口1

package test.bird.starrysky_sudoku;

/**
 * author  dengyuhan
 * created 2017/5/16 11:33
 */
public interface ITimerSupport {
    void start();

    void pause();

    void resume();

    void stop();

    void reset();
}

//接口2

package test.bird.starrysky_sudoku;

/**
 * 倒计时监听
 * author  dengyuhan
 * created 2017/5/16 11:42
 */
public interface OnCountDownTimerListener{
    void onTick(long millisUntilFinished);

    void onFinish();
}

//枚举状态

package test.bird.starrysky_sudoku;

/**
 * author  dengyuhan
 * created 2017/5/16 13:28
 */
public enum TimerState {
    START,PAUSE,FINISH
}

接下来就好办了,实例化,调用

public void setTime(){
        mTimer = new CountDownTimerSupport();
        mTimer.setMillisInFuture( 10 * 60 * 1000);//总时长
        mTimer.setCountDownInterval(1000);//时间间隔
        mTimer.setOnCountDownTimerListener(new OnCountDownTimerListener() {
            @Override
            public void onTick(long millisUntilFinished) {
                finishTime = millisUntilFinished ;
                String str2 = String.valueOf(((millisUntilFinished/1000) % 60));
                if (((millisUntilFinished/1000) % 60)<10){
                    str2 = "0"+(millisUntilFinished/1000) % 60;//设置10秒之后的显示形式09
                }
                timecount.setText((millisUntilFinished/60/1000) + ":" + str2);
                //时间显示出来
                pb.setProgress((int) millisUntilFinished/100/60);
            }

            @Override
            public void onFinish() {
                timecount.setText((0+":" + "00"));
                pb.setProgress(0);//设置进度条
                dialogShow(lostDialog);//显示失败的dialog
            }

        });

        mTimer.start();//别忘了开始
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值