• 对于太多的不确定需求,封装方法最好写接口方便使用


    /**
    * 在控件上显示倒计时
    * @param countDownTime 全部的倒计时时间(单位:s)
    * @param interval 更新间隔(单位:s)
    * @param listenerCountDownTimerFinish 监听事件
    * return countDownTimer 在倒计时没有关闭的时候可以取消倒计时
    * */
    public static android.os.CountDownTimer startTimer(int countDownTime,
    int interval,
    final ListenerCountDownTimerFinish listenerCountDownTimerFinish)
    {
    android.os.CountDownTimer countDownTimer = null;
    // 由于CountDownTimer并不是准确计时,在onTick方法调用的时候,time会有1-10ms左右的误差,这会导致最后一秒不会调用onTick()
    // 因此,设置间隔的时候,默认减去了10ms,从而减去误差。
    // 经过以上的微调,最后一秒的显示时间会由于10ms延迟的积累,导致显示时间比1s长max*10ms的时间,其他时间的显示正常,总时间正常
    countDownTimer = new android.os.CountDownTimer(countDownTime * 1000, interval * 1000 - 10) {
    long timeInt ;
    @Override
    public void onTick(long time) {
    // 第一次调用会有1-10ms的误差,因此需要+15ms,防止第一个数不显示,第二个数显示2s
    timeInt = (time + 15) / 1000;
    if(listenerCountDownTimerFinish != null){
    listenerCountDownTimerFinish.onTick(timeInt);
    }
    }
    @Override
    public void onFinish() {
    if(listenerCountDownTimerFinish != null){
    listenerCountDownTimerFinish.onFinish();
    }
    }
    };
    if(countDownTimer != null){
    countDownTimer.start();
    }
    return countDownTimer;
    }

    对于太多的不确定需求,其实核心代码已封装,用接口能够最大限度的扩展,不至于有新的需求去改代码,接口只暴露方法,最大限度的提高了扩展和复用,最后把countDownTimer 返回,方便页面关闭,倒计时没结束,可以在onDestory(); countDownTimer.cancl();取消,防止内存泄漏

    上面是最后封装的代码,传入的接口,在countDownTimer 的onTick()方法里写上 listenerCountDownTimerFinish.onFinish();在countDownTimer 的onFinish()方法里写上 listenerCountDownTimerFinish.onFinish(); 然后调用哪里,哪里实现就会有这两个方法,比较方便.

    在Activity 直接调用即可,下面是调用的示例代码:

    PublicMethodUtil.startTimer(4, 1, new ListenerCountDownTimerFinish() {
    @Override
    public void onTick(long second) {
    showCountDownTime = second + "s后自动跳转";
    tv_time.setText(showCountDownTime);
    }

    @Override
    public void onFinish() {
    Intent intent = new Intent(ActivityPayWaitResult.this, ActivityOrderLists.class);
    intent.putExtra("person_status", AppConstant.ORDER_BUYER);
    startActivity(intent);
    if (tourdiy_group_id > 0) {
    //拼团详情h5
    String[] configHost = getResources().getStringArray(R.array.site_url);
    Intent intent_more = new Intent(ActivityPayWaitResult.this, WebViewActivity.class);
    intent_more.putExtra("url","http://"+configHost[0]+"/index.php?app=wap&mod=MallTourdiy&act=group&group_id="+tourdiy_group_id);
    intent_more.putExtra("type","token_url");
    intent_more.putExtra("api_version",true);
    startActivity(intent_more);
    }
    finish();
    }
    });

    
    
     作者:郝金刚
    
    
    
    


  • 相关阅读:
    按列数自动换行
    百度C 语言吧 · 问题资料大全
    最新动态.某美女象山旅游计划
    被点名了,玩个游戏。
    我们仍未知道那天所看见的题的解法 1
    我们仍未知道那天所看见的题的解法 2
    算法初探 平衡树
    排列组合
    HttpRunner2.X开源接口测试框架学习(一):介绍与安装
    jmeter基础一:JMeter的主要测试组件总结
  • 原文地址:https://www.cnblogs.com/widgetbox/p/9020824.html
Copyright © 2020-2023  润新知