8

Hi can anyone help me on my small project please, I have been following this Tutorial and I got to the part where I insert 1 Minute into the EditText the Progress Bar works fine 1 Progress per sec but when I put in more than 1 Minute into the EditText the Progress Bar does not work. It does not goes down please help?

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

}
}

Normal State of Timer

enter image description here

When I enter 1 Minute

enter image description here

When I Entered 3 Minutes

enter image description here

Progress Bar is not Counting Down

Ranjithkumar
  • 16,071
  • 12
  • 120
  • 159
Nazmul Hasan
  • 113
  • 1
  • 1
  • 8

1 Answers1

4

In your main.xml, for ProgressBar you mentioned max value as 60. So the progress bar takes it max value as 60 and your progress bar starts decreasing from 60 seconds onwards.

Instead of that to work your Progress bar properly all times, in your "setTimer()" method write the below line.

mProgressBar.setMax(60*time);
Chandrakanth
  • 3,711
  • 2
  • 18
  • 31
  • In setTimer() method first line itself is the declaration of the time variable...once check where you writing the statement. Better write at the end of the method. – Chandrakanth Dec 24 '14 at 06:17
  • I couldn't find that but I tried this private pTime; mProgressBar.setMax((int) pTime); and this worked but it flashes the default MaxProgress which is 60 for a sec then the calculation takes affect but it's not accurate though well I don't think it is – Nazmul Hasan Dec 24 '14 at 06:19
  • You posted the code what you written or not?? Once check your code in setTimer() method()!!!!???? – Chandrakanth Dec 24 '14 at 06:23
  • I got it, I think it's working, how would I add a sound to it onFinish Method? and make the progressbar flass red and thank you for your help i appreciate it – Nazmul Hasan Dec 24 '14 at 06:24
  • http://stackoverflow.com/questions/19464782/android-how-to-make-a-button-click-play-a-sound-file-every-time-it-been-presse check this link to play sound. – Chandrakanth Dec 24 '14 at 06:29