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

安卓手机在使用过程中,交互行为最常见的动作有ACTION_DOWN(按下)、ACTION_MOVE(移动)、ACTION_UP(抬起)、ACTION_CANCEL(保持按下操作,并从你的控件转移到外层控件) ,ACTION_OUTSIDE(用户触碰超出了正常的UI边界)以及多点触摸事件等。

一次点击事件(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,则代表未处理,需要将事件传递出去(即会被其他监听器监听到)。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下嗷呜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值