2014-12-24 15 views
7

Xin chào ai có thể giúp tôi trong dự án nhỏ của tôi, tôi đã làm theo hướng dẫn này và tôi đã đến phần mà tôi chèn 1 phút vào EditText. tốt 1 Tiến độ mỗi giây nhưng khi tôi đặt trong hơn 1 phút vào EditText thanh tiến trình không hoạt động. Nó không đi xuống xin vui lòng giúp đỡ?Đồng hồ đếm ngược thông minh Thanh tiến trình không khớp với hẹn giờ

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

} 
} 

Bình thường Nhà nước Hẹn giờ

enter image description here

Khi tôi nhập 1 Minute

enter image description here

Khi tôi nhập 3 Minutes

enter image description here

Progress Bar không Counting Down

+1

Bạn có thể cho tôi liên kết đến hướng dẫn không? – Pejs

Trả lời

3

Trong main.xml của bạn , cho ProgressBar bạn đã đề cập giá trị tối đa là 60. Vì vậy, thanh tiến trình lấy giá trị lớn nhất là 60 và thanh tiến trình của bạn bắt đầu giảm từ 60 giây trở đi.

Thay vì đó để làm việc thanh tiến trình của bạn đúng cách, trong phương thức "setTimer()" của bạn viết dòng dưới đây.

mProgressBar.setMax(60*time); 
+0

thời gian không thể được giải quyết cho một biến –

+0

Trong phương thức setTimer() dòng đầu tiên chính nó là khai báo của biến thời gian ... khi kiểm tra nơi bạn viết câu lệnh. Viết tốt hơn ở cuối phương thức. – Chandrakanth

+0

Tôi không thể tìm thấy điều đó nhưng tôi đã thử số này thời gian riêng tư; mProgressBar.setMax ((int) pTime); và điều này làm việc nhưng nó nhấp MaxProgress mặc định là 60 cho một giây sau đó tính toán có ảnh hưởng đến nhưng nó không chính xác mặc dù tôi không nghĩ rằng nó là –

Các vấn đề liên quan