Android基础学习(14)-时间服务的相关组件
Android基础学习(14)-时间服务的相关组件
AlanCooper 发表于3年前
Android基础学习(14)-时间服务的相关组件
  • 发表于 3年前
  • 阅读 35
  • 收藏 1
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

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

	};
}

界面:


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

界面:

4、Thread




  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 5
博文 67
码字总数 27450
×
AlanCooper
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: