View的Click,LongClick,Touch事件的研究

概述

我们都知道一个View有以下三个事件监听方法:

setOnClickListener();
setOnLongClickListener();
setOnTouchListener();

每一个方法代表着用户不同的操作,分别为:短按,长按和触摸操作.

短按事件
通常一个View设置短按事件监听的代码如下:

view.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        //do something
    }
});

长按事件
通常一个View设置长按事件监听的代码如下:

ttttButton.setOnLongClickListener(new OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {
        //do something
        return true;
    }
});

这里有一个返回值:

true if the callback consumed the long click, false otherwise.

意思是说:如果时间被消费了返回true,否则返回false.

触摸事件
通常一个View设置触摸事件监听的代码如下:

ttttButton.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();
        if (action == MotionEvent.ACTION_DOWN) {
            //do something
            return true;
        }

        if (action == MotionEvent.ACTION_MOVE) {
            //do something
            return true;
        }

        if (action == MotionEvent.ACTION_UP) {
            //do something
            return true;
        }
        return false;
    }
});

这里每一个动作都有一个返回值,返回值会影响触摸事件.一个View如果只设置了onTouchListener事件监听.
只有Down返回值为true时,Move和Up动作才能监听到.

如果给一个View同时设置以上三个方法,会出现怎样的结果呢?


测试

1.测试界面

先附上测试界面的效果图,如下:
HomePage
上图有8个按钮,全部都是设置了onClickListener,onLongClickListener,onTouchListener.正如图中所示,按钮上的字母代表不同的含义.点击不同的按钮进行测试.

2.测试结果

最终的测试结果列表如下:

序号ClickLongClickDownMoveUp短按长按备注
1truetruetruetruedown-move-updown-move-up
2truefalsetruetruedown-move-up-longClickdown-move-longClick-move-up按钮不抬起
3truetruetruefalsedown-move-updown-move-up
4truefalsetruefalsedown-move-up-clickdown-move-longClick-move-up
5falsetruetruetruedown-move-updown-move-up
6falsefalsetruetruedown-move-up-longClickdown-move-longClick-move-up按钮不抬起
7falsetruetruefalsedown-move-updown-move-up
8falsefalsetruefalsedown-move-up-clickdown-move-longClick-move-up-click

其中上表中的第2项结果如下图(上为短按,下为长按),按钮不会弹起:
短按
长按

第6项结果如下图(上为短按,下为长按),按钮不会弹起:
短按
长按

3.结论

测试结果因返回值不同而不同.所以尽管onTouchListener中down返回true时move和up才起作用,但是如果设置了onlongclciklistener,即使down返回false也能触发move和up事件.
一般地,View的onTouchListener优先级高于onClickListener和onLongClickListener.
可以根据需要使用不同的事件监听进行组合.

4.源码

源码在我的GitHub中:DevWiki的GitHub:ViewClickDemo

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DevWiki

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

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

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

打赏作者

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

抵扣说明:

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

余额充值