2016-01-20 71 views
1

您好我已实施CountDownTimer计时器与SeekBar它工作正常,我的问题是我无法更改计时器时,我拖动搜索栏如何实现此目的。CountDownTimer与Seekbar

例如:如果我拖动并增加CountDownTimer它应该增加这样的时间也减少。

CountDownTimer代码:

private void startTimer(final int minuti) { 
    countDownTimer = new CountDownTimer(60 * minuti * 1000 , 
      500) { 

     // 500 means, onTick function will be called at every 500 
     // milliseconds 

     @Override 
     public void onTick(long leftTimeInMilliseconds) { 


      circularSeekbar.setMax(60 * minuti); 



      int barVal = 0; 


       barVal = ((int) (minuti * 60) - (int) (seconds)); 



      circularSeekbar.setProgress(-barVal); 


      mTvTime.setText(String.format("%02d", seconds/60) + ":" 
        + String.format("%02d", seconds % 60)); 
      Log.d("TIME", mTvTime.getText().toString()); 




     } 

     @Override 
     public void onFinish() { 

     } 
    }.start(); 

} 

搜索栏代码:

public class CircleSeekBarListener implements 
       OnCircularSeekBarChangeListener { 
      @Override 
      public void onProgressChanged(CircularSeekBar circularSeekBar, 
        int progress, boolean fromUser) { 

       if (fromUser) { 


       } 

      } 

      @Override 
      public void onStopTrackingTouch(CircularSeekBar seekBar) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onStartTrackingTouch(CircularSeekBar seekBar) { 
       // TODO Auto-generated method stub 

      } 
     } 
+0

@Piku你能告诉我们你的Seek-bar的值是几秒还是几毫秒? – TdSoft

+0

@TdSoft秒 – Piku

回答

0

试试这个代码。

public class MainActivity extends AppCompatActivity { 
    private int seconds = 120; // two min 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     circularSeekbar = (SeekBar) findViewById(R.id.circularSeekbar); 
     mTvTime = (TextView) findViewById(R.id.mTvTime); 


     circularSeekbar.setMax(seconds); 
     circularSeekbar.setProgress(seconds); 
     circularSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
       if(fromUser) { 
        seconds = progress; 
       } 

      } 

      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 

      } 

      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 
       startTimer(seconds * 1000); 
      } 
     }); 

     startTimer(seconds * 1000); 
    } 


    private void startTimer(final long milisecods) { 
     if (countDownTimer != null) { 
      countDownTimer.cancel(); 
     } 
     countDownTimer = new CountDownTimer(milisecods, 500) { 

      // 500 means, onTick function will be called at every 500 
      // milliseconds 

      @Override 
      public void onTick(long leftTimeInMilliseconds) { 

       int barVal = (int) leftTimeInMilliseconds/1000; 
       circularSeekbar.setProgress(barVal); 
       mTvTime.setText(String.format("%02d:%02d", 
         TimeUnit.MILLISECONDS.toMinutes(leftTimeInMilliseconds), 
         TimeUnit.MILLISECONDS.toSeconds(leftTimeInMilliseconds) - 
           TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(leftTimeInMilliseconds)) 
       )); 
      } 

      @Override 
      public void onFinish() { 

      } 
     }.start(); 

    } 
} 
+0

对不起,它不起作用 – Piku

+0

我的计时器开始像02:00它倒计时00:00 – Piku

+0

我没有得到这行startTimer(seekBar.getProgress()* 1000); – Piku

0
here is code 
set your seekbar in onTick 
     timer = new CounterClass(150000, 1000); 
       timer.start(); 
    public class CounterClass extends CountDownTimer { 
     public CounterClass(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
     } 

     @Override 
     public void onFinish() { 
      // timeTextView.setText("Completed."); 

      this.cancel(); 
      AppUtills.FROMTIME_FINISH = true; 
      finish(); 
     } 

     public void onTick(long millisUntilFinished) { 
      long millis = millisUntilFinished; 
      caaryLong = millis; 
      String hms = String.format(
        "%02d:%02d", 
        TimeUnit.MILLISECONDS.toMinutes(millis) 
          - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS 
            .toHours(millis)), 
        TimeUnit.MILLISECONDS.toSeconds(millis) 
          - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS 
            .toMinutes(millis))); 
      System.out.println(hms); 

      timeTextView.setText(hms); 
     } 
    } 
-1

我后我是为我工作的代码块。在你的情况下,将seekbar progress max设置为以倒数计时器为单位的秒数。在倒数计时器中,时间以毫秒为单位,请在此行的帮助下将其更改为秒“TimeUnit.MILLISECONDS.toSeconds(milliseconds);” 定时器功能“public void onTick(long millisUntilFinished)” 设置进度等于“最大进度 - (给予计数器/ 1000的时间)”,它有助于随着时间的减少而增加进度。现在我认为这将帮助别人

//这里timetoset_counter是你想给你的计时器milliseconds.below线时间被改变成毫秒第二,使寻求秒移动.1sec = 1STEP的搜索栏

long maxprogress = TimeUnit.MILLISECONDS.toSeconds(timetoset_counter); 

//sekbar max shoulb be equal to max time given to the time counter. 

progress.setMax((int) maxprogress); 

CountDownTimer time= new CountDownTimer(timetoset_counter, 1000) { 

    public void onTick(long millisUntilFinished) { 

     //below line help to move your seek bar that is max of seek bar minus the time of counter divided by 1000 
     progress.setProgress((int)maxprogress-(int)(millisUntilFinished/1000)); 


     progress_time.setText(""+String.format("%02d:%02d", 
      TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - 
      TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)), // The change is in this line 
      TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - 
      TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)))); 

     progress_time.setText("" + TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)+":"+TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)); 
    } 

    //here you can have your logic to set text to edittext 

    public void onFinish() { 
     progress_time.setText("00:00"); 
    } 
}.start(); 
+0

这里timetoset_counter时间给毫秒计时器 –

+0

progress.setProgress((int)maxprogress-(int)(millisUntilFinished/1000)); //此行为增加你的进步随着时间的减少 给定的代码为我工作.hope这将有助于somone。 –