Android基础学习(14)-时间服务的相关组件

1、AnalogClock及DigitalClock组件


2、Chronometer组件 - 定时器

Chronometer:该组件可以定时执行特定程序代码,但只能每秒执行一次,无法自行设置执行程序的时间间隔。(将要在间隔1秒时间内执行的代码放到OnChronometerTickListener方法中,通过按钮事件或其它的方式来调用start()方法、stop()方法、finish()来启动、停止、结束需要执行的代码)

示例:Chronometer幻灯图片播放

public class Main extends Activity {
	private ImageView imgPhoto;
	private Button btnPlay, btnStop, btnEnd;
	private Chronometer croTimer;
	private int count = 0;// 设置正在播放的图片数

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 从资源文件中获取界面组件的ID值
		imgPhoto = (ImageView) findViewById(R.id.imgPhoto);
		btnPlay = (Button) findViewById(R.id.btnPlay);
		btnStop = (Button) findViewById(R.id.btnStop);
		btnEnd = (Button) findViewById(R.id.btnEnd);
		croTimer=(Chronometer) findViewById(R.id.croTimer);

		// 为各个button和Chronometer设置listener
		croTimer.setOnChronometerTickListener(chroListener);

		btnPlay.setOnClickListener(listener);
		btnStop.setOnClickListener(listener);
		btnEnd.setOnClickListener(listener);
	}

	private Chronometer.OnChronometerTickListener chroListener = new Chronometer.OnChronometerTickListener() {

		@Override
		public void onChronometerTick(Chronometer chronometer) {
			// 根据count值显示对应的图片
			switch (count) {
			case 0:
				imgPhoto.setImageResource(R.drawable.img0);
				break;
			case 1:
				imgPhoto.setImageResource(R.drawable.img1);
				break;
			case 2:
				imgPhoto.setImageResource(R.drawable.img2);
				break;
			case 3:
				imgPhoto.setImageResource(R.drawable.img3);
				break;
			case 4:
				imgPhoto.setImageResource(R.drawable.img4);
				break;
			case 5:
				imgPhoto.setImageResource(R.drawable.img5);
				break;
			}
			//播放下一张图片
			count++;
			//取6的余数
			count %= 6;
		}
	};

	private Button.OnClickListener listener = new Button.OnClickListener() {

		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			// 开始
			case R.id.btnPlay:
				croTimer.start();
				break;
			// 停止
			case R.id.btnStop:
				croTimer.stop();
				break;
			// 结束
			case R.id.btnEnd:
				finish();
			}
		}

	};
}

界面:

144613_qhSz_1054307.jpg

151050_Y2Cl_1054307.jpg


3、Timer类

Timer类:功能与Chronometer相似,但更强大,不但可以设置执行程序的时间间隔,也能指定多长时间后才开始执行。

示例:Timer秒表

public class Main extends Activity {
	private Button btnStart, btnStop, btnZero, btnEnd;
	private TextView textClock;
	private Boolean flagStart = false;// 秒表是否启动
	private int totalTime, min, sec;// 总时间、分、秒

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		Timer timer = new Timer();
		timer.schedule(timerTask, 0, 1000);// 延迟3秒执行Timer,间隔时间为1秒

		// 获取资源文件中的界面组件
		textClock = (TextView) findViewById(R.id.textClock);
		btnStart = (Button) findViewById(R.id.btnStart);
		btnStop = (Button) findViewById(R.id.btnStop);
		btnZero = (Button) findViewById(R.id.btnZero);
		btnEnd = (Button) findViewById(R.id.btnEnd);

		// 为按钮事件增添listener
		btnStart.setOnClickListener(myListener);
		btnStop.setOnClickListener(myListener);
		btnZero.setOnClickListener(myListener);
		btnEnd.setOnClickListener(myListener);
	}
	
	//Handler对象接收消息
	private Handler handler = new Handler() {
		//“接收消息”
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			switch (msg.what) {
			case 1:// timerTask的消息
				sec = totalTime % 60;// 获取秒数
				min = totalTime / 60;// 获取分钟数
				String str = "";
				if (min < 10)
					str = "0" + min;// 个位分钟数补零
				else
					str = "" + min;
				if (sec < 10)
					str = str + ":0" + sec;// 个位秒数补零
				else
					str = str + ":" + sec;
				textClock.setText(str);// 显示时间
				break;
			}
		}
	};

	private TimerTask timerTask = new TimerTask() {

		@Override
		public void run() {
			if (flagStart) {
				totalTime++;// 总时间加1秒
				Message message = new Message();// 传送消息给Handler
				//Handler对象会根据此数值判断消息的来源对象,会执行对应的处理程序
				message.what = 1;
				handler.sendMessage(message);
			}
		}

	};

	// 处理按钮程序代码
	private Button.OnClickListener myListener = new Button.OnClickListener() {

		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			// 开始
			case R.id.btnStart:
				flagStart = true;
				break;
			// 停止
			case R.id.btnStop:
				flagStart = false;
				break;
			// 归零
			case R.id.btnZero:
				totalTime = 0;
				textClock.setText("00:00");
				break;
			// 结束
			case R.id.btnEnd:
				finish();
			}
		}
	};
}

界面:

151938_VPhR_1054307.jpg

4、Thread




转载于:https://my.oschina.net/zhouyang2021/blog/322705

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值