Android Studio: как индикатор выполнения может заполняться на основе пользовательского ввода

#java #xml #android-studio #progress-bar

#java #xml #android-studio #индикатор выполнения

Вопрос:

Я использую образец индикатора выполнения из Github, однако я заметил, что для заполнения индикатора выполнения установлено фиксированное значение. Например, если цель подсчета шагов равна 10 (класс .java), значение man должно быть «10» в .XML

Моя цель: когда пользователь вводит количество шагов своей цели, значение «10» должно быть переменным и меняться в зависимости от пользовательского ввода.

фрагмент java:

 ProgressBar progressBar = (ProgressBar) this.findViewById(R.id.progressBar);
            ObjectAnimator animation = ObjectAnimator.ofInt(progressBar, "progress", lastStep, stepCounter); //animate only from last known step to current step count
            animation.setDuration(5000); // in milliseconds
            animation.setInterpolator(new DecelerateInterpolator());
            animation.start();
            lastStep = stepCounter;
  

Фрагмент XML

 <ProgressBar
            android:id="@ id/progressBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="376dp"
            android:layout_height="392dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:max="10"
            android:progress="0"
            android:progressDrawable="@drawable/circular" />
  

РЕДАКТИРОВАТЬ******************** РЕДАКТИРОВАТЬ

Извините, возможно, мой вопрос был неясен. Чтобы привести пример … если цель шага пользователя равна 500. Мне нужно, чтобы индикатор выполнения заполнялся соответственно. Следовательно, ЕСЛИ step_count = 250, то индикатор выполнения должен быть заполнен наполовину, ЕСЛИ step_count = 750, то он должен быть заполнен на 3/4. Мне нужно, чтобы прогрессия соответствовала значению переменной.

Ответ №1:

Установите android: неопределенный =»false». Посмотрите на этот полностью реализованный код

 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<ProgressBar
    android:id="@ id/pBar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="100dp"
    android:layout_marginTop="200dp"
    android:minHeight="50dp"
    android:minWidth="200dp"
    android:max="100"
    android:indeterminate="false"
    android:progress="0" />
<TextView
    android:id="@ id/tView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@ id/pBar"
    android:layout_below="@ id/pBar" />
<Button
    android:id="@ id/btnShow"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="130dp"
    android:layout_marginTop="20dp"
    android:text="Start Progress"
    android:layout_below="@ id/tView"/>
  
 public class MainActivity extends AppCompatActivity {
private ProgressBar pgsBar;
private int i = 0;
private TextView txtView;
private Handler hdlr = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    pgsBar = (ProgressBar) findViewById(R.id.pBar);
    txtView = (TextView) findViewById(R.id.tView);
    Button btn = (Button)findViewById(R.id.btnShow);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            i = pgsBar.getProgress();
            new Thread(new Runnable() {
                public void run() {
                    while (i < 100) {
                        i  = 1;
                        // Update the progress bar and display the current value in text view
                        hdlr.post(new Runnable() {
                            public void run() {
                                pgsBar.setProgress(i);
                                txtView.setText(i "/" pgsBar.getMax());
                            }
                        });
                        try {
                            // Sleep for 100 milliseconds to show the progress slowly.
                            Thread.sleep(100);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        }
    });
}
  

}

Комментарии:

1. Извините, возможно, мой вопрос был неясен. Чтобы привести пример … если цель шага пользователя равна 500. Мне нужно, чтобы индикатор выполнения заполнялся соответственно. Следовательно, ЕСЛИ step_count = 250, то индикатор выполнения должен быть заполнен наполовину, ЕСЛИ step_count = 750, то он должен быть заполнен на 3/4. Мне нужно, чтобы прогрессия соответствовала значению переменной.