Android手勢監聽GestureDetector

1.GestureDetector.OnGestureListener

onDown:表示用戶的按下動作,只要用戶觸摸屏幕,不管是點擊、長按、拖動、滑動都會先觸發。

onShowPress:表示用戶按下后,并沒有立刻松開,而是停留了極短的時間后就會觸發。

onSingleTapUp:表示用戶單純的一次點擊事件,并沒有其他事件,就會觸發。

onScroll:表示用戶的滑動,滑動時會連續觸發。

onLongPress:表示用戶的長按事件,按下后超過一定的時間會觸發。

onFling:表示用戶滑動后,剩下的慣性會繼續滑動,就會觸發。

------GestureDetector.OnGestureListener事件執行順序------

快速點擊屏幕:onDown→onSingleTapUp

稍微慢速的點擊屏幕:onDown→onShowPress→onSingleTapUp

長按屏幕:onDown→onShowPress→onLongPress

快速點擊屏幕后滑動無慣性:onDown→onScroll→onScroll→onScroll...........

慢速點擊屏幕后滑動無慣性:onDown→onShowPress→onScroll→onScroll→onScroll...........

快速點擊屏幕后滑動有慣性:onDown→onScroll→onScroll→onScroll...........→onFling

慢速點擊屏幕后滑動有慣性:onDown→onShowPress→onScroll→onScroll→onScroll...........→onFling

2.GestureDetector.OnDoubleTapListener

onSingleTapConfirmed:單擊事件,用來判定該次點擊是單純的SingleTap而不是DoubleTap。

onDoubleTap:雙擊事件

onDoubleTapEvent:

------GestureDetector.OnGestureListener加上GestureDetector.OnDoubleTapListener事件執行順序------

快速點擊屏幕:onDown→onSingleTapUp→onSingleTapConfirmed

稍微慢速的點擊屏幕:onDown→onShowPress→onSingleTapUp→onSingleTapConfirmed

雙擊屏幕:onDown→onSingleTapUp→onDoubleTap→onDoubleTapEvent→onDown→onDoubleTapEvent

3.用法

public class GestureActivity extends AppCompatActivity {

    private GestureDetector gestureDetector;

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

        gestureDetector = new GestureDetector(this, new MyGestureListener());
        gestureDetector.setOnDoubleTapListener(new MyDoubleTapListener());

        ImageView imageView = findViewById(R.id.image);
        imageView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                return gestureDetector.onTouchEvent(motionEvent);
            }
        });
    }

    class MyGestureListener implements GestureDetector.OnGestureListener {

        @Override
        public boolean onDown(MotionEvent motionEvent) {
            System.out.println("OnGestureListener:" + "onDown");
            return true;
        }

        @Override
        public void onShowPress(MotionEvent motionEvent) {
            System.out.println("OnGestureListener:" + "onShowPress");
        }

        @Override
        public boolean onSingleTapUp(MotionEvent motionEvent) {
            System.out.println("OnGestureListener:" + "onSingleTapUp");
            return true;
        }

        @Override
        public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
            System.out.println("OnGestureListener:" + "onScroll");
            return true;
        }

        @Override
        public void onLongPress(MotionEvent motionEvent) {
            System.out.println("OnGestureListener:" + "onLongPress");
        }

        @Override
        public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
            System.out.println("OnGestureListener:" + "onFling");
            return true;
        }
    }

    class MyDoubleTapListener implements GestureDetector.OnDoubleTapListener{

        @Override
        public boolean onSingleTapConfirmed(MotionEvent motionEvent) {
            System.out.println("OnDoubleTapListener:" + "onSingleTapConfirmed");
            return true;
        }

        @Override
        public boolean onDoubleTap(MotionEvent motionEvent) {
            System.out.println("OnDoubleTapListener:" + "onDoubleTap");
            return true;
        }

        @Override
        public boolean onDoubleTapEvent(MotionEvent motionEvent) {
            System.out.println("OnDoubleTapListener:" + "onDoubleTapEvent");
            return true;
        }
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    class MyContextClickListener implements GestureDetector.OnContextClickListener {

        @Override
        public boolean onContextClick(MotionEvent motionEvent) {
            System.out.println("OnContextClickListener:" + "onContextClick");
            return true;
        }
    }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 出處:炎之鎧郵箱:yanzhikai_yjk@qq.com博客地址:http://blog.csdn.net/to...
    炎之鎧閱讀 9,942評論 1 42
  • 一、概述當用戶觸摸屏幕的時候,會產生許多手勢,例如down,up,scroll,filing等等。一般情況下,我們...
    GB_speak閱讀 20,801評論 1 18
  • 總是 有那樣的情懷 可以穿越時空 帶回那份感動 在歲月如詩般劃過的時候 為你駐留 總是 有那樣的情懷 可以策馬揚鞭...
    無用齋主人閱讀 244評論 1 1
  • 揮別漸行漸遠的2016年,有笑有淚,有遺憾,有期待。回首2016年我的關鍵詞:感恩、惜福、糾結、停滯。 一、感恩 ...
    逆風飛行83閱讀 304評論 0 0
  • 洛陽牡丹紅,綠條抽仟拱 花比人嬌貴,但無人旖漾 蟬退蚊飛來,蝶舞蜂采香 北望青山翠,南尋芭蕉霜
    塞壬喜歡趴趴閱讀 383評論 0 0