Android手势监听、触摸监听器、onTouchListener

安卓手机在使用过程中,交互行为最常见的动作有ACTION_DOWN(按下)、ACTION_MOVE(移动)、ACTION_UP(抬起)、ACTION_CANCEL ,ACTION_OUTSIDE以及多点触摸事件等。

一次点击事件(onClickListener)由 一次down事件,多次move事件和一次up事件构成,move事件出现的次数由用户的按压效果决定。down表示手势事件开始,up表示结束,move则代表着过程。此时代码中onTouchLishtener方法中返回的结果为ture,则表示拦截用户的该次行为,由此方法进行处理。而事件不再传递给其他的事件监听器(如onClickListenter)。

//以悬浮窗部分代码为例
view.setOnTouchListener(new View.OnTouchListener() {
            private int x,y;
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch (motionEvent.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        x = (int) motionEvent.getRawX();
                        y = (int)motionEvent.getRawY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        int nowX = (int) motionEvent.getRawX();
                        int nowY = (int) motionEvent.getRawY();
                        int movedX = nowX - x;
                        int movedY = nowY - y;
                        x = nowX;
                        y = nowY;
                        layoutParams.x = layoutParams.x + movedX;
                        layoutParams.y = layoutParams.y + movedY;

                        // 更新悬浮窗控件布局
                        windowManager.updateViewLayout(view, layoutParams);
                        break;
                    default:
                        break;
                }
                return true;
            }
        });

MotionEvent的getRawX()、getRawY() 方法可获取当前移动到的位置(px)

MotionEvent的getAction()方法可获取当前动作:ACTION_DOWN(按下)、ACTION_MOVE(移动)、ACTION_UP(抬起)、ACTION_CANCEL ,ACTION_OUTSIDE。

如果touch事件中,返回了ture,则代表touch事件已处理用户的该次行为,不需要其他事件监听器进行处理,就不再将事件进行传递。如果返回了false,则代表未处理,需要将事件传递出去(即会被其他监听器监听到)。

Button/ImageButton可使用

单击监听OnClickListener或长时间单击(按住一段时间)OnLongClickListener

button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        //执行代码
    }
});
button.setOnLongClickListener(new View.OnLongClickListener() {
    public boolean onLongClick(View view) {
        //执行代码
        return true;
    }
});

 返回了ture,则代表事件已处理用户的该次行为,不需要其他事件监听器进行处理,就不再将事件进行传递。如果返回了false,则代表未处理,需要将事件传递出去(即会被其他监听器监听到)。

猜你喜欢

转载自blog.csdn.net/m0_57150356/article/details/132027966