<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > GestureDetector類(lèi)及其用法

GestureDetector類(lèi)及其用法

作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò ) 收藏

當用戶(hù)觸摸屏幕的時(shí)候,會(huì )產(chǎn)生許多手勢,例如down,up,scroll,filing等等。

本文引用地址:http://dyxdggzs.com/article/201610/305615.htm

一般情況下,我們知道View類(lèi)有個(gè)View.OnTouchListener內部接口,通過(guò)重寫(xiě)他的onTouch(View v, MotionEvent event)方法,我們可以處理一些touch事件,但是這個(gè)方法太過(guò)簡(jiǎn)單,如果需要處理一些復雜的手勢,用這個(gè)接口就會(huì )很麻煩(因為我們要自己根據用戶(hù)觸摸的軌跡去判斷是什么手勢)。

Android sdk給我們提供了GestureDetector(Gesture:手勢Detector:識別)類(lèi),通過(guò)這個(gè)類(lèi)我們可以識別很多的手勢,主要是通過(guò)他的onTouchEvent(event)方法完成了不同手勢的識別。雖然他能識別手勢,但是不同的手勢要怎么處理,應該是提供給程序員實(shí)現的。

GestureDetector這個(gè)類(lèi)對外提供了兩個(gè)接口:OnGestureListener,OnDoubleTapListener,還有一個(gè)內部類(lèi)SimpleOnGestureListener。

GestureDetector.OnDoubleTapListener接口:用來(lái)通知DoubleTap事件,類(lèi)似于鼠標的雙擊事件。

1,onDoubleTap(MotionEvent e):在雙擊的第二下,Touch down時(shí)觸發(fā) 。

2,onDoubleTapEvent(MotionEvent e):通知DoubleTap手勢中的事件,包含down、up和move事件(這里指的是在雙擊之間發(fā)生的事件,例如在同一個(gè)地方雙擊會(huì )產(chǎn)生DoubleTap手勢,而在DoubleTap手勢里面還會(huì )發(fā)生down和up事件,這兩個(gè)事件由該函數通知);雙擊的第二下Touch down和up都會(huì )觸發(fā),可用e.getAction()區分。

3,onSingleTapConfirmed(MotionEvent e):用來(lái)判定該次點(diǎn)擊是SingleTap而不是DoubleTap,如果連續點(diǎn)擊兩次就是DoubleTap手勢,如果只點(diǎn)擊一次,系統等待一段時(shí)間后沒(méi)有收到第二次點(diǎn)擊則判定該次點(diǎn)擊為SingleTap而不是DoubleTap,然后觸發(fā)SingleTapConfirmed事件。這個(gè)方法不同于onSingleTapUp,他是在GestureDetector確信用戶(hù)在第一次觸摸屏幕后,沒(méi)有緊跟著(zhù)第二次觸摸屏幕,也就是不是“雙擊”的時(shí)候觸發(fā)

GestureDetector.OnGestureListener接口:用來(lái)通知普通的手勢事件,該接口有如下六個(gè)回調函數:

1. onDown(MotionEvent e):down事件;

2. onSingleTapUp(MotionEvent e):一次點(diǎn)擊up事件;在touch down后又沒(méi)有滑動(dòng)

(onScroll),又沒(méi)有長(cháng)按(onLongPress),然后Touchup時(shí)觸發(fā)。

點(diǎn)擊一下非??斓?不滑動(dòng))Touchup:

onDown->onSingleTapUp->onSingleTapConfirmed

點(diǎn)擊一下稍微慢點(diǎn)的(不滑動(dòng))Touchup:

onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed

3. onShowPress(MotionEvent e):down事件發(fā)生而move或則up還沒(méi)發(fā)生前觸發(fā)該

事件;Touch了還沒(méi)有滑動(dòng)時(shí)觸發(fā)(與onDown,onLongPress)比較onDown只要Touch down一定立刻觸發(fā)。而Touchdown后過(guò)一會(huì )沒(méi)有滑動(dòng)先觸發(fā)onShowPress再是onLongPress。所以Touchdown后一直不滑動(dòng)

按照onDown->onShowPress->onLongPress這個(gè)順序觸發(fā)。

4. onLongPress(MotionEvent e):長(cháng)按事件;Touch了不移動(dòng)一直Touch down時(shí)觸發(fā)

5. onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑動(dòng)手

勢事件;Touch了滑動(dòng)一點(diǎn)距離后,在A(yíng)CTION_UP時(shí)才會(huì )觸發(fā)

參數:e1 第1個(gè)ACTION_DOWN MotionEvent 并且只有一個(gè);e2 最后一個(gè)ACTION_MOVE MotionEvent ;velocityX X軸上的移動(dòng)速度,像素/秒 ;velocityY Y軸上的移動(dòng)速度,像素/秒.觸發(fā)條件:X軸的坐標位移大于FLING_MIN_DISTANCE,且移動(dòng)速度大于FLING_MIN_VELOCITY個(gè)像素/秒

6. onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上

拖動(dòng)事件。無(wú)論是用手拖動(dòng)view,或者是以?huà)伒膭?dòng)作滾動(dòng),都會(huì )多次觸發(fā),這個(gè)方法在A(yíng)CTION_MOVE動(dòng)作發(fā)生時(shí)就會(huì )觸發(fā)

拋:手指觸動(dòng)屏幕后,稍微滑動(dòng)后立即松開(kāi)

onDown-----》onScroll----》onScroll----》onScroll----》………----->onFling

拖動(dòng)

onDown------》onScroll----》onScroll------》onFiling

SimpleOnGestureListener類(lèi)是GestureDetector提供給我們的一個(gè)更方便的響應不同手勢的類(lèi),這個(gè)類(lèi)實(shí)現了上述兩個(gè)接口(但是所有的方法體都是空的),該類(lèi)是static class,也就是說(shuō)它實(shí)際上是一個(gè)外部類(lèi)。程序員可以在外部繼承這個(gè)類(lèi),重寫(xiě)里面的手勢處理方法。

方法步驟

第一種示例:

1,通過(guò)GestureDetector的構造方法可以將SimpleOnGestureListener對象傳遞進(jìn)去,這樣GestureDetector能處理不同的手勢了。

public GestureDetector

(Context context, GestureDetector.OnGestureListener listener)

2,在OnTouchListener的onTouch方法中

private OnTouchListener gestureTouchListener = new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

return gDetector.onTouchEvent(event);

}

};

第二種示例:

使用方法

private GestureDetector mGestureDetector;

mGestureListener = new BookOnGestureListener();

構造出來(lái)mGestureDetector = new GestureDetector(mGestureListener);

class BookOnGestureListener implements OnGestureListener {

同時(shí)要public boolean onTouchEvent(MotionEvent event) {

mGestureListener.onTouchEvent(event);

}

第三種示例代碼

代碼:

01.private GestureDetector mGestureDetector;

02.@Override

03.public void onCreate(Bundle savedInstanceState) {

04. super.onCreate(savedInstanceState);

05. mGestureDetector = new GestureDetector(this, new LearnGestureListener());

06.}

07.@Override

08.public boolean onTouchEvent(MotionEvent event) {

09. if (mGestureDetector.onTouchEvent(event))

10. return true;


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>