Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 基本事件

Android 基本事件

編輯:關於Android編程

一、Android基本事件

1.onTouchEvent 觸摸事件(GestureDetector手勢操作類)

2.onKeyDown 鍵盤按下

3.onKeyLongPress 長按事件(鍵盤按下事件長)

4.onKeyUp 鍵盤松開

5.onKeyMultiple 鍵盤重復點擊

6.onBackPressed 返回事件

NOTE:鍵盤事件可以通過KeyEvent類獲取靜態的成員變量(例如:KeyEvent.KEYCODE_BACK返回鍵監聽,判斷keyCode和KeyEvent.KEYCODE_BACK的值是否相等);屏幕事件通過event.getAction()獲取動作與MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP比較判斷是按下還是松開,在按下時獲取X和Y坐標,松開時獲取X和Y坐標,通過比較可以判斷是那個方向滑動,如果是復雜的手勢那就要通過GestureDetector類來操作了(個人建議使用這個類)。

 

二、onTouchEvent和onTouch的區別?(其他同理)

1.onTouch的使用:

 

public class TActivity extends Activity implements OnTouchListener {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		TextView tv = (TextView) findViewById(R.id.tv);
		tv.setOnTouchListener(this);
	}

	//onTouch的使用
	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// TODO Auto-generated method stub
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN://按下
			break;
		case MotionEvent.ACTION_UP://釋放
			break;
		}
		return false;
	}	
}

 

2.onTouchEvent的使用:

 

public class TActivity extends Activity{
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		return super.onTouchEvent(event);
	}		
}

 

3.Android相關源碼:

public boolean dispatchTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        onUserInteraction();
    }
    if (getWindow().superDispatchTouchEvent(ev)) {
        return true;
    }
    return onTouchEvent(ev);
}
總結:可以看到onTouchListener的接口的優先級是要高於onTouchEvent的,假若onTouchListener中的onTouch方法返回true,那onTouchEvent是接收不到消息的。 因為Button的performClick是利用onTouchEvent實現,假若onTouchEvent沒有被調用到,那麼Button的Click事件也無法響應。

三、GestureDetector手勢操作類解析

 

GestureDetector這個類對外提供了兩個接口:OnGestureListener,OnDoubleTapListener,還有一個內部類SimpleOnGestureListener。

1.實現接口:OnGestureListener
a.onDown() Touch down時觸發
b.onShowPress() Touch了還沒有滑動時觸發(與onDown,onLongPress)比較onDown只要Touch down一定立刻觸發。而Touchdown後過一會沒有滑動先觸發onShowPress再是onLongPress。所以Touchdown後一直不 滑動,onDown->onShowPress->onLongPress這個順序觸發。
c.onSingleTapUp() 上面這兩個函數都是在touch down後又沒有滑動(onScroll),又沒有長按(onLongPress),然後Touchup時觸發。
點擊一下非常快的(不滑動)Touchup:onDown->onSingleTapUp->onSingleTapConfirmed
點擊一下稍微慢點的(不滑動)Touchup:onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
d.onScroll() 在屏幕上拖動事件。無論是用手拖動view,或者是以拋的動作滾動,都會多次觸發,這個方法在ACTION_MOVE動作發生時就會觸發拋:手指觸動屏幕後,稍微滑動後立即松開onDown->onScroll->onScroll->onScroll->………->onFling拖動onDown->onScroll->onScroll->onFiling
e.onLongPress() Touch了不移動一直Touch down時觸發
f.onFling() 滑動手勢事件;Touch了滑動一點距離後,在ACTION_UP時才會觸發參數:e1 第1個ACTION_DOWN MotionEvent 並且只有一個;e2 最後一個ACTION_MOVE MotionEvent ;velocityX X軸上的移動速度,像素/秒 ;velocityY Y軸上的移動速度,像素/秒.觸發條件:X軸的坐標位移大於FLING_MIN_DISTANCE,且移動速度大於FLING_MIN_VELOCITY個像素/秒

2.實現接口:OnDoubleTapListener
a.onSingleTapConfirmed() 用來判定該次點擊是SingleTap而不是DoubleTap,如果連續點擊兩次就是DoubleTap手勢,如果只點擊一次,系統等待一段時間後沒有收到第二次點擊則判定該次點擊為SingleTap而不是DoubleTap,然後觸發SingleTapConfirmed事件。這個方法不同於onSingleTapUp,他是在GestureDetector確信用戶在第一次觸摸屏幕後,沒有緊跟著第二次觸摸屏幕,也就是不是“雙擊”的時候觸發。
點擊一下非常快的(不滑動)Touchup:onDown->onSingleTapUp->onSingleTapConfirmed
點擊一下稍微慢點的(不滑動)Touchup:onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
b.onDoubleTap() 雙擊的第二下Touch down時觸發
c.onDoubleTapEvent() 通知DoubleTap手勢中的事件,包含down、up和move事件(這裡指的是在雙擊之間發生的事件,例如在同一個地方雙擊會產生DoubleTap手勢,而在DoubleTap手勢裡面還會發生down和up事件,這兩個事件由該函數通知);雙擊的第二下Touch down和up都會觸發,可用e.getAction()區分。

3.SimpleOnGestureListener類是GestureDetector提供給我們的一個更方便的響應不同手勢的類,這個類實現了上述兩個接口,我們可以通過繼承來重寫任意的方法。
NOTE:每個方法都有MotionEvent類的實例作為參數,我們可以通過這個實例和類操作。

這些都是基礎,加載一下供初學者學習,讓自己記憶更深刻,歡迎大家閱讀學習。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved