2014-12-24 27 views
7

Ciao qualcuno mi può aiutare nel mio piccolo progetto per favore, ho seguito questo tutorial e sono arrivato alla parte in cui inserisco 1 minuto in EditText la barra di avanzamento funziona bene 1 Progresso al secondo ma quando inserisco più di 1 minuto in EditText la barra di avanzamento non funziona. Non va giù per favore aiutatemi?La barra di avanzamento circolare del timer per il conto alla rovescia Android non corrisponde al timer

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/LinearLayout1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:background="#086A87"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:orientation="horizontal" 
    android:padding="10dp" > 

    <EditText 
     android:id="@+id/edtTimerValue" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:ems="10" 
     android:hint="minutes" 
     android:inputType="phone" /> 

    <Button 
     android:id="@+id/btnStartTime" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:layout_weight="2" 
     android:gravity="center" 
     android:text="Start Timer" 
     android:background="@drawable/custombuttongreen" 
     android:textColor="#fff"/> 

    <Button 
     android:id="@+id/btnStopTime" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:layout_weight="2" 
     android:gravity="center" 
     android:text="Stop Timer" 
     android:visibility="gone" 
     android:background="@drawable/custombuttongreen" 
     android:textColor="#fff"/> 

</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:orientation="vertical" > 

</LinearLayout> 



<RelativeLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 

    <ProgressBar 
    android:id="@+id/progressbar" 
    android:layout_width="350dip" 
    android:layout_height="350dip" 
    android:indeterminate="false" 
    android:progressDrawable="@drawable/circle" 
    android:background="@drawable/circle_shape" 
    style="?android:attr/progressBarStyleHorizontal" 
    android:max="60" 
    android:progress="0" /> 

    <TextView 
    android:id="@+id/tvTimeCount" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:text="00:00" 
    android:textColor="#fff" 
    android:textSize="60dip"/> 

</RelativeLayout> 

MainActivity.java

package com.tag.countdowntimer; 
import com.tag.countdowntimer.R.drawable; 
import android.R.color; 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity implements OnClickListener { 

int i=-1; 
ProgressBar mProgressBar; 

private Button buttonStartTime, buttonStopTime; 
private EditText edtTimerValue; 
private TextView textViewShowTime; // will show the time 
private CountDownTimer countDownTimer; // built in android class 
             // CountDownTimer 
private long totalTimeCountInMilliseconds; // total count down time in 
              // milliseconds 
private long timeBlinkInMilliseconds; // start time of start blinking 
private boolean blink; // controls the blinking .. on and off 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    buttonStartTime = (Button) findViewById(R.id.btnStartTime); 
    buttonStopTime = (Button) findViewById(R.id.btnStopTime); 
    textViewShowTime = (TextView) findViewById(R.id.tvTimeCount); 
    edtTimerValue = (EditText) findViewById(R.id.edtTimerValue); 

    buttonStartTime.setOnClickListener(this); 
    buttonStopTime.setOnClickListener(this); 

    mProgressBar = (ProgressBar) findViewById(R.id.progressbar); 

} 

@Override 
public void onClick(View v) { 
    if (v.getId() == R.id.btnStartTime) { 
     textViewShowTime.setTextAppearance(getApplicationContext(), 
       R.style.normalText); 
     setTimer(); 

     //Hides the Keyboard 
     InputMethodManager imm = (InputMethodManager)getSystemService(
        Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(edtTimerValue.getWindowToken(), 0); 

     buttonStopTime.setVisibility(View.VISIBLE); 
     buttonStartTime.setVisibility(View.GONE); 
     edtTimerValue.setVisibility(View.GONE); 
     edtTimerValue.setText(""); 
     //textViewShowTime.setTextColor(color.white); 
     //textViewShowTime.getContext(); 
     startTimer(); 

    } else if (v.getId() == R.id.btnStopTime) { 
     countDownTimer.cancel(); 
     buttonStartTime.setVisibility(View.VISIBLE); 
     buttonStopTime.setVisibility(View.GONE); 
     edtTimerValue.setVisibility(View.VISIBLE); 
    } 
} 

private void setTimer() { 
    int time = 0; 
    if (!edtTimerValue.getText().toString().equals("")) { 
     time = Integer.parseInt(edtTimerValue.getText().toString()); 
    } else 
     Toast.makeText(MainActivity.this, "Please Enter Minutes...", 
       Toast.LENGTH_LONG).show(); 

    totalTimeCountInMilliseconds = 60 * time * 1000; 

    timeBlinkInMilliseconds = 30 * 1000; 
} 

private void startTimer() { 
    countDownTimer = new CountDownTimer(totalTimeCountInMilliseconds, 500) { 
     // 500 means, onTick function will be called at every 500 
     // milliseconds 

     @Override 
     public void onTick(long leftTimeInMilliseconds) { 
      long seconds = leftTimeInMilliseconds/1000; 
      //i++; 
      //Setting the Progress Bar to decrease wih the timer 
      mProgressBar.setProgress((int) (leftTimeInMilliseconds/1000)); 
      textViewShowTime.setTextAppearance(getApplicationContext(), 
        R.style.normalColor); 


      if (leftTimeInMilliseconds < timeBlinkInMilliseconds) { 
       textViewShowTime.setTextAppearance(getApplicationContext(), 
         R.style.blinkText); 
       // change the style of the textview .. giving a red 
       // alert style 

       if (blink) { 
        textViewShowTime.setVisibility(View.VISIBLE); 
        // if blink is true, textview will be visible 
       } else { 
        textViewShowTime.setVisibility(View.INVISIBLE); 
       } 

       blink = !blink; // toggle the value of blink 
      } 

      textViewShowTime.setText(String.format("%02d", seconds/60) 
        + ":" + String.format("%02d", seconds % 60)); 
      // format the textview to show the easily readable format 

     } 

     @Override 
     public void onFinish() { 
      // this function will be called when the timecount is finished 
      textViewShowTime.setText("Time up!"); 
      textViewShowTime.setVisibility(View.VISIBLE); 
      buttonStartTime.setVisibility(View.VISIBLE); 
      buttonStopTime.setVisibility(View.GONE); 
      edtTimerValue.setVisibility(View.VISIBLE); 
     } 

    }.start(); 

} 
} 

normale stato di Timer

enter image description here

Quando entro 1 minuto

enter image description here

quando sono entrato 3 minuti

enter image description here

Barra di avanzamento non è il conto alla rovescia

+1

Potete darmi un collegamento al tutorial per favore? Il tempo – Pejs

risposta

3

Nella tua main.xml , per ProgressBar hai menzionato il valore massimo come 60. Quindi il la barra di avanzamento assume il valore massimo di 60 e la barra di avanzamento inizia a decrescere da 60 secondi in poi.

Invece di eseguire correttamente la barra di avanzamento tutte le volte, nel metodo "setTimer()" scrivi la riga seguente.

mProgressBar.setMax(60*time); 
+0

non può essere risolto con una variabile –

+0

Nel metodo setTimer() la prima riga stessa è la dichiarazione della variabile temporale ... una volta verificato dove si scrive la dichiarazione. Meglio scrivere alla fine del metodo. – Chandrakanth

+0

Non riuscivo a trovarlo, ma ho provato questo pTime privato ; mProgressBar.setMax ((int) pTime); e questo ha funzionato ma lampeggia il MaxProgress predefinito che è 60 per un secondo quindi il calcolo ha effetto ma non è preciso anche se non credo che sia –