Таймер обратного отсчета с панелью поиска

Привет, я реализовал таймер CountDownTimer с SeekBar, и он работает нормально, моя проблема в том, что я не могу изменить таймер, когда перетаскиваю панель поиска, как этого добиться.

Пример: если я перетащу и увеличу 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

            }
        }

person Piku    schedule 20.01.2016    source источник
comment
@Piku Можете ли вы сказать нам, что ваши значения на панели поиска представляют секунды или миллисекунды?   -  person Tharindu Welagedara    schedule 20.01.2016


Ответы (1)


Попробуйте этот код.

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();

    }
}
person Tharindu Welagedara    schedule 20.01.2016
comment
Мой таймер начинается с 02:00, он будет отсчитывать время до 00:00. - person Piku; 20.01.2016
comment
Я не получаю эту строку startTimer(seekBar.getProgress() * 1000); - person Piku; 20.01.2016
comment
В таймере обратного отсчета мой код работает хорошо, проблем нет. Я думаю, что проблема в панели поиска. Мы должны обновить код в строке поиска - person Piku; 20.01.2016
comment
Согласно вашему коду, если я перетаскиваю, я получаю значения 3023:54 Вот так - person Piku; 20.01.2016
comment
@Piku Вы правильно установили максимальное значение панели поиска? Попробуйте установить эти значения (circularSeekbar.setMax (секунды); circularSeekbar.setProgress (секунды);) именно так, как я сделал, и попробуйте - person Tharindu Welagedara; 20.01.2016
comment
Давайте продолжим обсуждение в чате. - person Tharindu Welagedara; 20.01.2016