Android:實現定時器 Handler的postDelayed(Runnable, long)方法

先演示一個Demo代碼。功能是每隔一秒實現Textview顏色的變化,而且是循環變化直到停止。

package com.example.handlerpost;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {

	Button mBtok;
	Button mBtCancel;
	TextView mNumber;
	private int mRunCount = 0;
	private int TIME = 1000;

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

		mBtok = (Button) findViewById(R.id.btok);
		mBtCancel = (Button) findViewById(R.id.btCancel);
		mNumber = (TextView) findViewById(R.id.number);
		mBtCancel.setOnClickListener(this);
		mBtok.setOnClickListener(this);

	}

	@Override
	public void onClick(View arg0) {
		switch (arg0.getId()) {
		case R.id.btok:
			mHandler.removeCallbacks(mRunnable);
			mHandler.postDelayed(mRunnable, 0);

			break;
		case R.id.btCancel:
			closeTimer();

			break;

		}
	}

	private void closeTimer() {
		mRunCount = 0;
		mHandler.removeCallbacks(mRunnable);
		mNumber.setTextColor(android.graphics.Color.parseColor("#FF4040"));//最初的顏色

	}

	Handler mHandler = new Handler() {
		public void handleMessage(Message msg) {
			switch (msg.what) {
			default:
				break;
			}
		}
	};

	Runnable mRunnable = new Runnable() {
		@Override
		public void run() {
			switch (mRunCount) {
			case 0:
				mNumber.setTextColor(android.graphics.Color.parseColor("#FF4040"));
				break;
			case 1:
				mNumber.setTextColor(android.graphics.Color.parseColor("#FF3E96"));
				break;
			case 2:
				mNumber.setTextColor(android.graphics.Color.parseColor("#FF1493"));
				break;
			case 3:
				mNumber.setTextColor(android.graphics.Color.parseColor("#FF00FF"));
				break;
			case 4:
				mNumber.setTextColor(android.graphics.Color.parseColor("#FF0000"));
				break;
			case 5:
				mNumber.setTextColor(android.graphics.Color.parseColor("#C1C1C1"));
				break;
			case 6:
				mNumber.setTextColor(android.graphics.Color.parseColor("#C0FF3E"));
				break;
			case 7:
				mNumber.setTextColor(android.graphics.Color.parseColor("#BF3EFF"));
				break;
			case 8:
				mNumber.setTextColor(android.graphics.Color.parseColor("#BC8F8F"));
				break;
			case 9:
				mNumber.setTextColor(android.graphics.Color.parseColor("#9AFF9A"));
				break;
			case 10:
				mNumber.setTextColor(android.graphics.Color.parseColor("#0000EE"));
				mRunCount = -1;
				break;

			}
			mRunCount++;

			// handler的postDelayed方法實現定時器
			try {
				mHandler.postDelayed(this, TIME);
			} catch (Exception e) {
				e.printStackTrace();
				mRunCount = 0;
			}
		}
	};

}

1,首先創建一個Handler對象
Handler mHandler=new Handler();
2,然後創建一個Runnable對象
Runnable mRunnable=new Runnable(){
   @Override
   public void run() {
    //要做的事情,這裏再次調用此Runnable對象,以實現每秒實現一次的定時器操作

     mHandler.postDelayed(this, 1000);
   } 
};
3,mHandler.postDelayed(runnable, 1000);使用PostDelayed方法,1秒後調用此Runnable對象
4. 定義int類型變量mRunCount 變量和定時器結合,每走1S變量加1,到最後一個值加1後爲0,然後繼續循環。
5,mHandler.removeCallbacks(runnable); 用此方法關閉循環定時器



發佈了81 篇原創文章 · 獲贊 92 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章