嗨,任何人都可以帮助我完成我的小项目,我一直在关注这个教程,我到达了我在EditText中插入1分钟的部分,进度条工作正常1每秒进度但是当我输入超过1分钟时EditText进度条不起作用.它没有下降请帮忙吗?
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(); } }
正常的定时器状态
当我输入1分钟
当我进入3分钟
进度条不是倒计时
解决方法
在main.xml中,对于ProgressBar,您提到最大值为60.因此,进度条将最大值设为60,进度条从60秒开始逐渐减少.
而不是始终正确地处理您的进度条,在“setTimer()”方法中写下面的行.
mProgressBar.setMax(60*time);