在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            GestureDetector類及其用法

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

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

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

            一般情況下,我們知道View類有個View.OnTouchListener內(nèi)部接口,通過重寫他的onTouch(View v, MotionEvent event)方法,我們可以處理一些touch事件,但是這個方法太過簡單,如果需要處理一些復(fù)雜的手勢,用這個接口就會很麻煩(因?yàn)槲覀円约焊鶕?jù)用戶觸摸的軌跡去判斷是什么手勢)。

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

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

            GestureDetector.OnDoubleTapListener接口:用來通知DoubleTap事件,類似于鼠標(biāo)的雙擊事件。

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

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

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

            GestureDetector.OnGestureListener接口:用來通知普通的手勢事件,該接口有如下六個回調(diào)函數(shù):

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

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

            (onScroll),又沒有長按(onLongPress),然后Touchup時(shí)觸發(fā)。

            點(diǎn)擊一下非常快的(不滑動)Touchup:

            onDown->onSingleTapUp->onSingleTapConfirmed

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

            onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed

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

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

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

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

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

            勢事件;Touch了滑動一點(diǎn)距離后,在ACTION_UP時(shí)才會觸發(fā)

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

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

            拖動事件。無論是用手拖動view,或者是以拋的動作滾動,都會多次觸發(fā),這個方法在ACTION_MOVE動作發(fā)生時(shí)就會觸發(fā)

            拋:手指觸動屏幕后,稍微滑動后立即松開

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

            拖動

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

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

            方法步驟

            第一種示例:

            1,通過GestureDetector的構(gòu)造方法可以將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();

            構(gòu)造出來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;


            上一頁 1 2 下一頁

            關(guān)鍵詞:

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉