Android---Touch事件的传递机制 & Viewpager和View的事件相应规则

本文探讨了Android中Touch事件的传递机制,详细解析了viewpager与内部嵌套view之间的事件响应规则。包括不同场景下事件如何被分配给viewpager或view,以及view的事件如何在特定条件下被取消并转交给viewpager。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Touch事件的传递机制

二、viewpager和view的事件响应规则  
1. 当滑动很慢并且滑动很短距离的时候,viewpager和view的事件全部执行
2. 当滑动很快并且滑动较长的距离或者切换的界面的时候,会执行view的Cancel事件,结束掉view的所有事件,会只执行viewpager的事件
          public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
//getParent() : 获取控件的父控件  
getParent().requestDisallowInterceptTouchEvent(true);   //设置是否父控件拦截事件,true:传递事件,false:拦截事件
startX = (int) ev.getX();
startY = (int) ev.getY();
break;
 }

三、Viewpager和内部嵌套的View的事件交互规则
       //1,按下事件作用在内部view上
       //2,当滑动稍许距离,加速度未达到一定值时,对应滑动事件作用在view身上
      //3,当滑动达到一定距离,并且加速度达到一定值,(比如翻页 切换界面)内部的view触发cancel事件,然后将滑动的事件返还给父控件(ViewPager)
         @Override
         public  Object instantiateItem(ViewGroup  container int   position ) {

            View  view  = View. inflate (getApplicationContext(),R.layout. item , null );
 
  

             view .setOnTouchListener( new  OnTouchListener() {
                 @Override
                 public   boolean  onTouch(View  v , MotionEvent  event ) {
                     switch  ( event .getAction()) {
                     case  MotionEvent. ACTION_UP :
                        Log. i ( tag "view MotionEvent.ACTION_UP" );
                         break ;
                     case  MotionEvent. ACTION_DOWN :
                        Log. i ( tag "view MotionEvent.ACTION_DOWN" );
                        
                         break ;
                     case  MotionEvent. ACTION_MOVE :
                        Log. i ( tag "view MotionEvent.ACTION_MOVE" );
                        
                         break ;
                     case  MotionEvent. ACTION_CANCEL :
                        Log. i ( tag "view MotionEvent.ACTION_CANCEL" );
                         break ;
                    }
                     return   true ;
                }
            });

            container.addView(view);
            return view;
        }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值