码迷,mamicode.com
首页 > 其他好文 > 详细

计时/倒计时

时间:2018-06-12 11:40:33      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:信息   defs   des   显示   lis   err   gre   turn   cte   

倒计时线程

public class LeesCountDownThread extends AsyncTask<String, Integer, String> {
    //AsyncTask<String, Integer, String>
    //三个泛型类型分别代表“启动任务执行的输入参数”、“后台任务执行的进度”、“后台计算结果的类型”。
    // 在特定场合下,并不是所有类型都被使用,
    // 如果没有被使用,可以用java.lang.Void类型代替
    private static final String TAG = "LeesCountDownThread";

    TimerView _timerView=null;
    int _start=1;
    int _interval=1;
    //TimerView 回调VIEW,nStart:起始计数,nInterval:时间间隔(ms)
    public LeesCountDownThread(TimerView tv, @IntRange(from = 1,to=65535)int nStart, @IntRange(from = 1,to=65535)int nInterval){
        _timerView=tv;
        _start=nStart;
        _interval=nInterval;
    }
    //内部执行后台任务,不可在此方法内修改UI
    @Override
    protected String doInBackground(String... params){
        try{
            int nVal=_start;
            while(nVal>0){
                publishProgress(nVal);
                sleep(_interval);
                nVal--;
            }
        }catch (Exception e){
            Log.e(TAG,e.getMessage());
        }
        return null;
    }

    @Override
    protected void onPreExecute(){
        super.onPreExecute();
        _timerView.setValue(_start);
    }
    //在调用publishProgress(Progress... values)时,此方法被执行,直接将进度信息更新到UI组件上。
    @Override
    protected void onProgressUpdate(Integer... progress){
        super.onProgressUpdate(progress);
        _timerView.setValue(progress[0]);
    }

    //当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。
    @Override
    protected void onPostExecute(String s){
        super.onPostExecute(s);
        _timerView.setValue(0);
    }
}

 

显示View  继承自TextView

/*
* @author xhzxlqt@163.com
* create at 2018/6/11
* description:计时/倒计时 显示视图
*/
public class TimerView extends android.support.v7.widget.AppCompatTextView{
    private Map<Integer,OnValueListener> valueMap=new HashMap<Integer,OnValueListener>();

    private String strPre="",strEnd=" ms";

    public TimerView(Context context) {
        super(context,null,0);
    }
    public TimerView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
    public TimerView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public TimerView setPreString(String s){
        this.strPre=s;
        return this;
    }
    public TimerView setEndString(String s){
        this.strEnd=s;
        return this;
    }

    //更新
    public void setValue(int nVal){
        setText(strPre+String.valueOf(nVal)+strEnd);
        for(Integer key:valueMap.keySet()){
            if(nVal==key){
                OnValueListener listener=valueMap.get(key);
                if(listener!=null){
                    listener.onValue(this);
                }
                break;
            }
        }
    }
    //添加达到某值时的回调
    public TimerView addActiveListener(Integer nVal,OnValueListener listener){
        valueMap.put(nVal,listener);
        return this;
    }
}

 

示例:

TimerView tv=(TimerView)findViewById(R.id.textView_Skip);
        LeesCountDownThread lcdt=new LeesCountDownThread(tv,10,1000);
        lcdt.execute("");
        tv.setPreString("Skip ")
                .setEndString("")
                .addActiveListener(4, new OnValueListener() {
                    @Override
                    public void onValue(View v) {
                        TimerView tv = (TimerView) findViewById(R.id.textView_Skip);
                        tv.setText("It‘s 4.");
                    }
                })
                .addActiveListener(0, new OnValueListener() {
                    @Override
                    public void onValue(View v) {
                        TimerView tv = (TimerView) v;
                        tv.setText("It‘s Over.");
                    }
                });

 

计时/倒计时

标签:信息   defs   des   显示   lis   err   gre   turn   cte   

原文地址:https://www.cnblogs.com/xhzxlqt/p/9172185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!