Обратный отсчет с прогрессбаром - PullRequest
0 голосов
/ 19 января 2020

Я хотел бы прогрессировать мой ProgressBar в соответствии с установленным отсчетом времени. Вот что я сделал

package com.lezardman.istpcommunity.Adapter;

import android.os.CountDownTimer;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.lezardman.istpcommunity.Model.Lesson;
import com.lezardman.istpcommunity.R;

import java.util.ArrayList;
import java.util.Locale;

public class AgendaLessonAdapter extends RecyclerView.Adapter<AgendaLessonAdapter.ViewHolder> {

    private ArrayList<Lesson> lessons;
    private CountDownTimer mCountDownTimer;
    private int i = 0;


    public AgendaLessonAdapter(ArrayList<Lesson> lessons) {
        this.lessons = lessons;
    }


    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_cours_agenda, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull AgendaLessonAdapter.ViewHolder holder, int position) {
        Lesson lesson = lessons.get(position);

        //holder.lessonTimeRemain.setText("" + lesson.getLessonTime());
        holder.lessonClass.setText(lesson.getLessonClass());
        holder.lessonAndHours.setText(lesson.getLessonAndHours());

        final long time = lesson.getLessonTime();


        countDown(holder.lessonTimeRemain, time, holder.lessonProgress);

    }


    @Override
    public int getItemCount() {
        return lessons.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder {

        TextView lessonAndHours, lessonClass, lessonTimeRemain;
        ProgressBar lessonProgress;

        ViewHolder(@NonNull View itemView) {
            super(itemView);

            lessonAndHours = itemView.findViewById(R.id.lessonAndHours);
            lessonClass = itemView.findViewById(R.id.lessonClass);
            lessonProgress = itemView.findViewById(R.id.lessonProgress);
            lessonTimeRemain = itemView.findViewById(R.id.lessonTimeRemain);


        }
    }

    private void countDown(final TextView lessonTimeRemain, final long time, final ProgressBar lessonProgress) {
        i++;
        lessonProgress.setProgress(i);
        mCountDownTimer = new CountDownTimer(time, 1000) {
            @Override
            public void onTick(long l) {
                i++;
                lessonProgress.setProgress((int) (i * 100 / (time / 1000)));
                updateCountDownText(l, lessonTimeRemain);
//                lessonProgress.setMax((int) time);

            }

            @Override
            public void onFinish() {
                lessonProgress.setProgress(100);
            }
        }.start();
    }

    private void updateCountDownText(long time, TextView lessonTimeRemain) {

        int hours = (int) (time / (1000 * 60 * 60));
        int minutes = (int) (time % (1000 * 60 * 60)) / (1000 * 60);
        int seconds = (int) ((time % (1000 * 60 * 60)) % (1000 * 60) / 1000);


        String timerLeftFormatted = String.format(Locale.getDefault(), "- %02d:%02d:%02d", hours, minutes, seconds);
        lessonTimeRemain.setText(timerLeftFormatted);
    }
}

, но мой прогрессбар заполняется, когда время еще не истекло.

помогите мне установить sh алгоритм для расчета времени и, следовательно, для синхронизации progressBar. PS: когда мой отсчет достигает 00:00:01 Он больше не движется, он не достигает 00:00:00, как я могу установить это также

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...