2015-08-20 6 views
0

У меня есть обратный отсчет, как progressBar, и я хочу увеличить его прогресс на кнопке buttonClick. Проблема в том, что прогресс растет, но только визуально. Если прогресс вниз на 60 и я нажимаю кнопку, чтобы увеличить его должно быть 80, но вместо этого, прогресс декремента от 60, а не 80. Вот мой код:Android progressBar не увеличивает прогресс

public class MainActivity extends AppCompatActivity { 
    ProgressBar timeLeft; 
    CountDownTimer gameCountDownTimer; 
    Button increment; 
    int progress; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     timeLeft = (ProgressBar) findViewById(R.id.timeLeft); 
     increment = (Button) findViewById(R.id.increment); 
     timeLeft.setMax(100); 
     setTimer(10); 

     increment.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       timeLeft.incrementProgressBy(20); 
      } 
     }); 
    } 

    private void setTimer(int time) { 
     progress = 100; 
     final int actualTime = time*1000; 
     timeLeft.setProgress(progress); 
     gameCountDownTimer = new CountDownTimer(actualTime, 1000) { 
      int totalTime = actualTime; 
      @Override 
      public void onTick(long millisUntilFinished) { 
       progress = (int)(millisUntilFinished /(double)totalTime * 100); 
       timeLeft.setProgress(progress); 
      } 
      @Override 
      public void onFinish() { 
       progress = 0; 
       timeLeft.setProgress(progress); 
      } 
     }.start(); 
    } 
} 

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context=".Main"> 


    <ProgressBar 
     android:id="@+id/timeLeft" 
     style="@android:style/Widget.ProgressBar.Horizontal" 
     android:max="100" 
     android:progress="100" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 

    <Button 
     android:id="@+id/increment" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Increment" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" /> 

</RelativeLayout> 
+0

Проблема в том, что метод onTick не учитывает текущий ход бара, он использует только millisUntilFinished –

ответ

0

Вместо использования использования таймера метод postDelayed:

int interval=1000; 
int totalTime=10000; 
timeLeft.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     currentTime+=interval; 
     timeLeft.setProgress(timeLeft.getProgress()-(timeLeft.getMax()/totalTime)*interval); 
     if(timeLeft.getProgress>0){ 
      timeLeft.postDelayed(this,interval); 
     } 
    } 
}, interval); 
0

попробовать этот расчет прогресса. например, взять millisUntilFinished 5000 и totalTime 10000.

тогда прогресс должен быть 50.

в вашем случае это было (ИНТ) +0,005 что 0, поэтому ваш прогрессбар stucked в одной точке.

@Override 
public void onTick(long millisUntilFinished) { 
    progress = (int)((millisUntilFinished* 100) /(double)totalTime); 
    timeLeft.setProgress(progress); 
} 
Смежные вопросы