Android View(20190311 Study)

本文详细解析了Android中touch事件的传递机制,包括super方法的作用、不同返回值的影响,以及ViewGroup和View在事件处理中的角色。同时,深入探讨了视图的测量、布局和绘制过程,特别是子view的measureSpec由父viewgroup决定的细节。

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

1.getLeft getRight getBottom getTop (getX getY 移动后要变) (getTranslationX  getTranlationY移动要变)方法和属性 都是相对于父布局的。

2.Android touch事件传递必须通过super方法传递

1.action_down:Activity : super.dispatchTouchEvent()->
              e:ViewGroup:super.dispatchTouchEvent()->
              a:ViewGroup:onInterceptTouchEvent()->
              a.1.return true->b:ViewGroup:onTouchEvent()->b.1.return false->Activity:onTouchEvent->over
                                                           b.2.return true->over
              a.2.return false->c:View:super.dispatchTouchEvent()->d:View:onTouchEvent()->
              d.1.return false->c.1.return false->f:ViewGroup:onTouchEvent()->
                                                  f.1.return false->e.1.return false ->Activity:onTouchEvent->over
                                                  f.2.return true->e.2.return true->over
              d.2.return true -> c.2.return true -> e.2.return true ->over
2.几点返回值的重要说明;
 2.1.Activity :onTouchEvent方法调不调用取决于ViewGroup的dispatchTouchEvent的返回值,true,不执行,false,要执行
 2.2.ViewGroup:dispatchTouchEvent返回值是ViewGroup:onTouchEvent(如果返回true及其返回true,返回false及其返回false)影响和受子
     View:dispatchTouchEvent(受View:onTouchEvent影响,如果返回true及其返回true,返回false及其返回false)
     的返回值影响(前提是View:dispatchTouchEvent返回true及ViewGroup:onTouchEvent没有调用),返回true及其返回true,返回false及其返回false。
     如果ViewGroup的onInterceptTouchEvent返回true,touch事件是不会被传递下去的。
 2.3.action_up等后续touch动作的传递,受action_down在哪被消耗(dispatchTouchEvent返回true)才能传递到哪,而且必须一层一层被消耗,才能一层一层传递下去
 2.4.Activity ViewGroup View的相应的super.dispatchTouchEvent super.onInterceptTouchEvent super.onTouchEvent都返回false,其中View.onTouchEvent如
     果view为clickable(设置click监听器等会让其成为clickable)会返回true。

3.View三个过程 onMeasure onLayout onDraw

   3.1 因为子view的measurespec是由viewgroup的getChildMeasureSpec()决定的,当子view参数是wrap_content或者是

         match_parent,他的specmode是at_most,他的宽高(View.getDefaultSize() )是在父布局里可以得到的最大宽高。

转载于:https://my.oschina.net/u/2987490/blog/3020836

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值