重临true表示onLongClick消费了本次风浪,再次来到true表示onLongClick消费了此次事件

输出日志的结果

 

view有dispatchTouch伊芙nt,onTouch伊夫nt那多个点子,ViewGroup多了一个onInterceptTouch伊夫nt方法,此格局决定触发事件是和谐处理,依旧散发给下二个组件处理.

默许流程dispatchTouch伊芙nt(Motion伊夫nt
ev)、onInterceptTouch伊芙nt(Motion伊芙nt ev)、onTouch伊夫nt(Motion伊芙nt
ev),全部再次回到super.xxxxxxx
 澳门金冠网站主页 1       

2:事件涉及到的常用方法

View是全数UI组件的基类(如:TextView,Button,ImageView),而
ViewGroup是包容那个零部件的容器(如:LinearLayout,ReltiveLayout),ViewGroup是View派生出来的.

 

二:举二个板栗

onInterceptTouchEvent是ViewGroup提供的章程,暗许再次回到false,再次来到true表示拦截,重返true后,由此类的onTouch伊芙nt方法来推行

10-15 22:11:26.877 22219-22219/com.activity I/info: MainActivity--dispatchTouchEvent()ACTION_DOWN
10-15 22:11:26.878 22219-22219/com.activity E/info: BossView  dispatchTouchEvent()   boss create task!
10-15 22:11:26.879 22219-22219/com.activity E/info: BossView  onInterceptTouchEvent()  boss将task 分配给manager
10-15 22:11:26.879 22219-22219/com.activity I/info: ManagerView  经理让onInterceptTouchEvent决定任务由谁完成
10-15 22:11:26.879 22219-22219/com.activity I/info: ManagerView  onInterceptTouchEvent()经理接收到任务安排,员工做得不好,自己来做任务
10-15 22:11:26.879 22219-22219/com.activity I/info: ManagerView   onTouchEvent() 经理验收任务结果,并向老板报告
10-15 22:11:26.879 22219-22219/com.activity E/info: BossView  onTouchEvent()   工作已经完毕
10-15 22:11:26.886 22219-22219/com.activity I/info: MainActivity--dispatchTouchEvent()ACTION_MOVE
10-15 22:11:26.902 22219-22219/com.activity I/info: MainActivity--dispatchTouchEvent()ACTION_MOVE
10-15 22:11:26.912 22219-22219/com.activity I/info: MainActivity--dispatchTouchEvent()ACTION_MOVE
10-15 22:11:26.919 22219-22219/com.activity I/info: MainActivity--dispatchTouchEvent()ACTION_MOVE
10-15 22:11:26.921 22219-22219/com.activity I/info: MainActivity--dispatchTouchEvent()ACTION_UP

澳门金冠网站主页 2

澳门金冠网站主页 3

日志输出:

 澳门金冠网站主页 4

用户点击显示器时,将触发viewGroup的dispatchTouchEvent(Motion伊芙nt
ev)、onInterceptTouch伊夫nt(Motion伊芙nt ev)、onTouch伊芙nt(Motion伊芙nt
ev);

鉴于代码大致,那里只贴出ManagerView的代码,完整代码下载连接在篇章下方

 澳门金冠网站主页 5

三:代码

3
 老董将三个职责分配给老板,因为上一遍职分,高管没有接受职员和工人的做事报告,所以本次CEO决定,本人的来本次成功,将事件一直消费(onInterceptTouch伊芙nt重回true),不分给职员和工人去做,让职工一边凉快去

3
 CEO将3个职分分配给老总,因为上1次任务,老板没有接到职员和工人的工作报告,所以这一次CEO决定,自个儿的来这次成功,将事件直接消费(onInterceptTouch伊夫nt重临true),不分给员工去做,让职员和工人一边凉快去

1
 COO将贰个职分分配给老董,首席执行官将职务分配给职员和工人去做到,职员和工人完结后,将结果报告给首席执行官,老板将任务结果上报给总裁娘,那是暗中同意流程。

1:今后有多个现象,用户长按button,大家愿意只触发onLongClick,然则onClick事件也触发了.

2:view 和 viewGroup的介绍

出口日志:

 

dispatchTouch伊夫nt是拍卖触摸事件分发,事件(多数气象)是从Activity的dispatchTouch伊芙nt起首的。执行super.dispatchTouch伊芙nt(ev),事件向下分发。

三:代码

在品种中,日常遇上事件抵触,ScrollView,ViewPager滑动卡顿等意况,比如:onClick和onLongClick事件争辨,dispatchTouch伊芙nt,onInterceptTouch伊夫nt这一个格局都有3个boolean再次来到值,不一致再次来到值事件处理机制是见仁见智的。

澳门金冠网站主页 6

2:事件波及到的常用方法

 

用户点击显示屏时,将触发viewGroup的dispatchTouch伊夫nt(Motion伊夫nt
ev)、onInterceptTouch伊芙nt(Motion伊夫nt ev)、onTouch伊芙nt(Motion伊夫nt
ev);

onTouchEvent是View中提供的方法,ViewGroup也有其一法子,view中不提供onInterceptTouch伊芙nt。view中暗中认可重返true,表示开支了那个事件。

10-15 20:13:31.600 8716-8716/com.activity E/info: BossView  dispatchTouchEvent()   boss create task!
10-15 20:13:31.600 8716-8716/com.activity E/info: BossView  onInterceptTouchEvent()  boss将task 分配给manager
10-15 20:13:31.600 8716-8716/com.activity I/info: ManagerView  经理让onInterceptTouchEvent决定任务由谁完成
10-15 20:13:31.600 8716-8716/com.activity I/info: ManagerView  onInterceptTouchEvent()经理接收到任务,将任务分配给员工
10-15 20:13:31.601 8716-8716/com.activity I/info: EmployeesView 员工开始工作.
10-15 20:13:31.601 8716-8716/com.activity I/info: EmployeesView 员工圆满完成任务.
10-15 20:13:31.602 8716-8716/com.activity I/info: ManagerView   onTouchEvent() 经理验收任务结果,并向老板报告
10-15 20:13:31.602 8716-8716/com.activity E/info: BossView  onTouchEvent()   工作已经完毕
10-15 20:13:31.600 8716-8716/com.activity E/info: BossView  dispatchTouchEvent()   boss create task!
10-15 20:13:31.600 8716-8716/com.activity E/info: BossView  onInterceptTouchEvent()  boss将task 分配给manager
10-15 20:13:31.600 8716-8716/com.activity I/info: ManagerView  经理让onInterceptTouchEvent决定任务由谁完成
10-15 20:13:31.600 8716-8716/com.activity I/info: ManagerView  onInterceptTouchEvent()经理接收到任务,将任务分配给员工
10-15 20:13:31.601 8716-8716/com.activity I/info: EmployeesView 员工开始工作.
10-15 20:13:31.601 8716-8716/com.activity I/info: EmployeesView 员工圆满完成任务.
10-15 20:13:31.602 8716-8716/com.activity I/info: ManagerView   onTouchEvent() 经理验收任务结果,并向老板报告
10-15 20:13:31.602 8716-8716/com.activity E/info: BossView  onTouchEvent()   工作已经完毕

 

默许流程dispatchTouch伊芙nt(Motion伊夫nt
ev)、onInterceptTouch伊夫nt(Motion伊夫nt ev)、onTouch伊芙nt(Motion伊芙nt
ev),全体回到super.xxxxxxx
 澳门金冠网站主页 7       

澳门金冠网站主页 8

 

onInterceptTouchEvent是ViewGroup提供的方法,暗中同意重返false,再次来到true表示拦截,重返true后,因此类的onTouch伊芙nt方法来推行

public class ManagerView extends LinearLayout {
    private final String TAG="ManagerView  ";
    private int index=0;
    public ManagerView(Context context) {
        super(context);
    }

    public ManagerView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(index==0){
            Log.i("info",TAG+" onTouchEvent() 经理验收任务结果,并向老板报告");
        }else{
            Log.i("info",TAG+" onTouchEvent()  自己亲自来完成任务");
        }
        return super.onTouchEvent(event);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        index = 0;
//        if(index==0){
//            Log.i("info",TAG+"onInterceptTouchEvent()经理接收到任务,将任务分配给员工");
//            return super.onInterceptTouchEvent(ev);
//        }else{
            Log.i("info",TAG+"onInterceptTouchEvent()经理接收到任务安排,员工做得不好,自己来做任务");
            return true;
//        }

    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        Log.i("info",TAG+"经理让onInterceptTouchEvent决定任务由谁完成");
        return super.dispatchTouchEvent(ev);
    }
}

输出日志的结果

3:方法重临值介绍

澳门金冠网站主页 9

View是全部UI组件的基类(如:TextView,Button,ImageView),而
ViewGroup是包容这个零件的器皿(如:LinearLayout,ReltiveLayout),ViewGroup是View派生出来的.

onTouchEvent是View中提供的法子,ViewGroup也有其一法子,view中不提供onInterceptTouch伊芙nt。view中暗中认可再次回到true,表示开支了那个事件。

澳门金冠网站主页 10

3:方法再次来到值介绍

这种景况比如不难,直接在onLongClick再次来到true就能够缓解了,重临true表示onLongClick消费了这一次风云。

那种意况比如不难,直接在onLongClick重返true就足以缓解了,再次回到true表示onLongClick消费了此次事件。

 

备考:上传代码时,笔者电脑github出了点小标题,假若代码有标题,请留言,代码下载地址:github

二:举贰个板栗

日记输出:

是因为代码差不多,那里只贴出ManagerView的代码,完整代码下载连接在篇章下方

2:view 和 viewGroup的介绍

 

澳门金冠网站主页 11

澳门金冠网站主页,1:今后有四个风貌,用户长按button,大家盼望只触发onLongClick,不过onClick事件也触及了.

2
 COO将贰个职责分配给首席营业官,COO将职分分配给职员和工人去做到,员工觉得难度大,不能够形成(onTouch伊夫nt再次来到true),由于业主没有收到到办事报告,会不停向经营分发职务(managerView的dispatchTouch伊夫nt方法将不停被调用,职员和工人的dispatchTouch伊芙nt方法也会被持续调用)。

澳门金冠网站主页 12

 

一:事件分发流程

一:事件分发流程

出口日志:

1
 组长将多少个义务分配给老董,老总将任务分配给职员和工人去做到,职员和工人实现后,将结果报告给COO,高管将职务结果上报给业主,那是暗中认可流程。

在品种中,常常蒙受事件争辨,ScrollView,ViewPager滑动卡顿等处境,比如:onClick和onLongClick事件争论,dispatchTouch伊芙nt,onInterceptTouch伊芙nt这个点子都有贰个boolean重临值,不一致重返值事件处理机制是见仁见智的。

public class ManagerView extends LinearLayout {
    private final String TAG="ManagerView  ";
    private int index=0;
    public ManagerView(Context context) {
        super(context);
    }

    public ManagerView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(index==0){
            Log.i("info",TAG+" onTouchEvent() 经理验收任务结果,并向老板报告");
        }else{
            Log.i("info",TAG+" onTouchEvent()  自己亲自来完成任务");
        }
        return super.onTouchEvent(event);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        index = 0;
//        if(index==0){
//            Log.i("info",TAG+"onInterceptTouchEvent()经理接收到任务,将任务分配给员工");
//            return super.onInterceptTouchEvent(ev);
//        }else{
            Log.i("info",TAG+"onInterceptTouchEvent()经理接收到任务安排,员工做得不好,自己来做任务");
            return true;
//        }

    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        Log.i("info",TAG+"经理让onInterceptTouchEvent决定任务由谁完成");
        return super.dispatchTouchEvent(ev);
    }
}

备注:上传代码时,作者电脑github出了点小标题,如若代码有毛病,请留言,代码下载地址:github

 

10-15 22:11:26.877 22219-22219/com.activity I/info: MainActivity--dispatchTouchEvent()ACTION_DOWN
10-15 22:11:26.878 22219-22219/com.activity E/info: BossView  dispatchTouchEvent()   boss create task!
10-15 22:11:26.879 22219-22219/com.activity E/info: BossView  onInterceptTouchEvent()  boss将task 分配给manager
10-15 22:11:26.879 22219-22219/com.activity I/info: ManagerView  经理让onInterceptTouchEvent决定任务由谁完成
10-15 22:11:26.879 22219-22219/com.activity I/info: ManagerView  onInterceptTouchEvent()经理接收到任务安排,员工做得不好,自己来做任务
10-15 22:11:26.879 22219-22219/com.activity I/info: ManagerView   onTouchEvent() 经理验收任务结果,并向老板报告
10-15 22:11:26.879 22219-22219/com.activity E/info: BossView  onTouchEvent()   工作已经完毕
10-15 22:11:26.886 22219-22219/com.activity I/info: MainActivity--dispatchTouchEvent()ACTION_MOVE
10-15 22:11:26.902 22219-22219/com.activity I/info: MainActivity--dispatchTouchEvent()ACTION_MOVE
10-15 22:11:26.912 22219-22219/com.activity I/info: MainActivity--dispatchTouchEvent()ACTION_MOVE
10-15 22:11:26.919 22219-22219/com.activity I/info: MainActivity--dispatchTouchEvent()ACTION_MOVE
10-15 22:11:26.921 22219-22219/com.activity I/info: MainActivity--dispatchTouchEvent()ACTION_UP

 

2
 老总将1个职责分配给老总,经理将职分分配给职员和工人去做到,职员和工人觉得难度大,不可能到位(onTouch伊芙nt重返true),由于业主没有收受到工作报告,会不停向经营分发义务(managerView的dispatchTouch伊夫nt方法将不停被调用,职员和工人的dispatchTouch伊芙nt方法也会被持续调用)。

 

dispatchTouch伊芙nt是拍卖触摸事件分发,事件(多数状态)是从Activity的dispatchTouch伊芙nt开头的。执行super.dispatchTouch伊夫nt(ev),事件向下分发。

view有dispatchTouch伊芙nt,onTouch伊夫nt这个情势,ViewGroup多了3个onInterceptTouch伊夫nt方法,此情势决定触发事件是团结处理,如故散发给下2个组件处理.