Android 基本事件

來源:互聯網
上載者:User

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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main);TextView tv = (TextView) findViewById(R.id.tv);tv.setOnTouchListener(this);}//onTouch的使用@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubswitch (event.getAction()) {case MotionEvent.ACTION_DOWN://按下break;case MotionEvent.ACTION_UP://釋放break;}return false;}}

 

2.onTouchEvent的使用:

 

public class TActivity extends Activity{@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubreturn 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類的執行個體作為參數,我們可以通過這個執行個體和類操作。

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.