最近項目中需要實現(xiàn)手勢上滑或者點擊滑出界面的效果,實現(xiàn)上是利用GestureDetector,然后在onFling中判斷,但遇到一個問題:手勢上滑是針對整個布局的,但如果有對單獨的View設(shè)置點擊監(jiān)聽,在該View上的手勢上滑會失效。

    如果這個View本身就是專門用于點擊的,那并沒有什么問題,可惜的是,這個View的尺寸不大,所以要求擴(kuò)大點擊區(qū)域。

    我們首先能想到的方法就是用一個容器將該View包起來,類似RelativeLayout,LinearLayout等,但這樣布局的層級就會再加多一層。

    我們能否想到不用增加層級也能實現(xiàn)點擊區(qū)域擴(kuò)大的方法呢?

    GestureDetector是Android提供的手勢操作類,它提供了單擊,雙擊,長按等操作,并且會將這些事件傳給onTouch,因此我們可以利用這個來判斷觸發(fā)單擊事件的到底是哪個控件。

    但是我們的問題是擴(kuò)大點擊區(qū)域,而不是識別控件,因此需要知道用戶的點擊動作到底是落在哪個區(qū)域。

    所幸,MotionEvent提供了事件發(fā)生時候的坐標(biāo),這樣我們就能知道單擊時候的坐標(biāo),進(jìn)一步確定是否在指定的區(qū)域范圍內(nèi)。

    MotionEvent是Android中觸控方面編碼的一個至關(guān)重要的類,它提供了用戶在屏幕上的觸控信息。我們可以通過MotionEvent獲取到觸控的事件類型,觸控的坐標(biāo),并且現(xiàn)在已經(jīng)支持多點觸碰,還能進(jìn)一步獲取觸控的索引信息。

    我們先上代碼:

網(wǎng)友評論