设想一下我们来实现一个这样的功能:里面有三个按钮(开始计时,停止计时,重置)点击开始按钮,计时组件开始计时,点击停止计时,计时停止,点击重置,计时停止,且计时组件归0,其中我们还可以增加一个时间限制按钮,如果超出了这个限制时间,则计时自动停止,效果图如下所示:
首先进行xml文件的布局
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="4"
android:gravity="center"
android:text="设置时间:"
android:textColor="#ff0000"/>
<EditText
android:id="@+id/edt_settime"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="#ff0000"
android:inputType="number" />
</LinearLayout>
<Chronometer
android:id="@+id/chronometer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="#ff0000"
android:textSize="60dip" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="10dip"
android:orientation="horizontal" >
<Button
android:id="@+id/btnStart"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#ffff00"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="开始记时" />
<Button
android:id="@+id/btnStop"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#ffff00"
android:layout_marginRight="10dp"
android:text="停止记时" />
<Button
android:id="@+id/btnReset"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#ffff00"
android:layout_marginRight="10dp"
android:text="重置" />
</LinearLayout>
然后进行Java文件的代码编写(关键代码)
package chird.example.com.chird;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Random;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Random;
import java.util.Scanner;
public class MainActivity_change extends AppCompatActivity {
private int startTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_change);
final Chronometer chronometer = (Chronometer) findViewById(R.id.chronometer);
Button btnStart = (Button) findViewById(R.id.btnStart);
Button btnStop = (Button) findViewById(R.id.btnStop);
Button btnRest = (Button) findViewById(R.id.btnReset);
final EditText edtSetTime = (EditText) findViewById(R.id.edt_settime);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String ss = edtSetTime.getText().toString();
if (!(ss.equals(""))) {
startTime = Integer.parseInt(edtSetTime.getText()
.toString());
}
// 设置开始讲时时间,毫秒为基本单位
chronometer.setBase(SystemClock.elapsedRealtime());
// 开始记时
chronometer.start();
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 停止
chronometer.stop();
}
});
btnRest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
chronometer.setBase(SystemClock.elapsedRealtime());
}
});
chronometer
.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
// 如果开始计时到现在超过了startime秒
if (SystemClock.elapsedRealtime()
- chronometer.getBase() > startTime * 1000) {
chronometer.stop();
// 给用户提示
showDialog();
}
}
});
}
private void showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.jingao);
builder.setTitle("警告").setMessage("时间到")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
//这个理解已经超出了我的理解范围,待后面用处再说。
public void onClick(DialogInterface dialog, int which) {
}
});
//将对话框显示出来
AlertDialog dialog = builder.create();
dialog.show();
}
}
最后如果超时,效果如下: