自定义计时器

为了显示时间的流逝,下面我们来自定义一个TextView实现计时功能.代码如下:

import java.text.SimpleDateFormat;
import java.util.Date;

import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;

public class TimerTextView extends TextView {
	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			sendEmptyMessageDelayed(0, 1000);
			setTime();
			time += 1000;
		};
	};

	private long time;

	private SimpleDateFormat mformat = new SimpleDateFormat("mm:ss");

	public TimerTextView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		setTime();
	}

	public TimerTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
		setTime();
	}

	public TimerTextView(Context context) {
		super(context);
		setTime();
	}
	//开始计时
	public void startTimer() {
		time = 1000;
		handler.sendEmptyMessageDelayed(0, 1000);
		setVisibility(View.VISIBLE);
	}
	//停止计时
	public void stopTimer() {
		time = 0;
		handler.removeMessages(0);
		setTime();
		setVisibility(View.GONE);
	}
	//更新时间
	private void setTime() {
		setText(mformat.format(new Date(time)));
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用 Android 自定义控件来创建一个分秒计时器控件,以下是一个示例代码: ``` public class CustomTimerView extends LinearLayout { private TextView mMinutesTextView; private TextView mSecondsTextView; private int mMinutes; private int mSeconds; private boolean mIsRunning; private CountDownTimer mCountDownTimer; public CustomTimerView(Context context) { super(context); init(); } public CustomTimerView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } public CustomTimerView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.custom_timer_view, this, true); mMinutesTextView = findViewById(R.id.minutes_text_view); mSecondsTextView = findViewById(R.id.seconds_text_view); mMinutes = 0; mSeconds = 0; mIsRunning = false; } public void setMinutes(int minutes) { mMinutes = minutes; mMinutesTextView.setText(String.format(Locale.getDefault(), "%02d", mMinutes)); } public void setSeconds(int seconds) { mSeconds = seconds; mSecondsTextView.setText(String.format(Locale.getDefault(), "%02d", mSeconds)); } public void start() { if (!mIsRunning) { mIsRunning = true; int totalTime = mMinutes * 60 + mSeconds; mCountDownTimer = new CountDownTimer(totalTime * 1000, 1000) { @Override public void onTick(long millisUntilFinished) { int minutes = (int) (millisUntilFinished / 1000) / 60; int seconds = (int) (millisUntilFinished / 1000) % 60; setMinutes(minutes); setSeconds(seconds); } @Override public void onFinish() { mIsRunning = false; } }; mCountDownTimer.start(); } } public void stop() { if (mIsRunning) { mIsRunning = false; mCountDownTimer.cancel(); } } public boolean isRunning() { return mIsRunning; } } ``` 这个自定义控件包括两个文本视图,用于显示分钟和秒数。还包括 `setMinutes()`、`setSeconds()`、`start()`、`stop()` 和 `isRunning()` 方法,用于设置分秒计时器时间、启动和停止计时器,以及检查计时器是否正在运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值