天天看點

手勢監聽上下左右需求關鍵代碼實作

需求

在開發中有時會監聽使用者的手指移動方向,來達到我們想要的效果。例如手機解屏,滑動删除等操作。在這裡寫出實作的關鍵代碼。

關鍵代碼實作

setOnTouchListener(new OnTouchListener() {
            private float startX,startY,offsetX, offsetY;
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch (motionEvent.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        startX = motionEvent.getX();
                        startY = motionEvent.getY();
                        break;
                    case MotionEvent.ACTION_UP:
                        offsetY = motionEvent.getY() - startY;
                        offsetX = motionEvent.getX() - startX;
                        if (Math.abs(offsetX) > Math.abs(offsetY)) {
                            //水準方向的意圖
                            if (offsetX < -5) {
                                //進行左滑的操作
                                Log.e(TAG, "onTouch: 左" );
                            } else if (offsetX > 5) {
                                //進行右滑的操左
                                Log.e(TAG, "onTouch: 右");
                            }
                            }else {
                            if (offsetY < -5) {
                                //進行上滑的操左
                                Log.e(TAG, "onTouch: 上");
                            } else if (offsetY > 5) {
                                //進行下滑的操左
                                Log.e(TAG, "onTouch: 下");
                            }
                        }
                        break;

                }

                return true;

            }