Open MicroKibaco opened 5 years ago
一开始 ViewGroup 会接受到整个事件序列的第一个事件:ACTION_DOWN,ViewGroup#dispatchTouchEvent 收到 ACTION_DOWN 后开始询问 ViewGroup#onInterceptTouchEvent 是否需要拦截,默认情况下 ViewGroup#onInterceptTouchEvent 返回 false 不拦截,开始向下传递 ACTION_DOWN 事件,Buttton#dispatchTouchEvent 收到 ACTION_DOWN 询问 onTouchEvent 是否处理,Button 默认处理,此后的所有事件序列都直接跨过 ViewGroup#onInterceptTouchEvent 的判断直接传递给 Button,但 ViewGroup#dispatchTouchEvent 会收到所有事件。
在 move 过程中 Button#onTouchEvent 发现当前坐标已经移出 Button 区域,会 remove 掉 onClick 的回调(源码位于 View#onTouchEvent 尾部 case MotionEvent.ACTION_MOVE 中),虽然 Button 收到并处理了 ACTION_DOWN -> ACTION_MOVE -> ACTION_UP 整个事件过程,但是并不会触发 onClick 回调。
这个事件过程并没有网上所说的 ACTION_CANCEL,ACTION_CANCEL 出现的条件是:ViewGroup 在传递过程中拦截了本应交由 Button 处理的事件,此时 Button 会收到 ACTION_CANCEL 表示事件中断。
事件自下往上,先进viewgroup的onintercept方法,不拦截然后给子view,到了button,button消费这个事件,手指划开了,调用button的oncancel,事件就取消了,松手再ontouchup,整个时间流程。
这个是不是滑动撞边的动画效果类似?思路:通过ondrophelper或者另一个方法实现拖拽效果,然后判断和屏幕的边距
杭州-张钊
事件自下往上,先进viewgroup的onintercept方法,不拦截然后给子view,到了button,button消费这个事件,手指划开了,调用button的oncancel,事件就取消了,松手再ontouchup,整个时间流程。
ViewGroup 拖拽不让其拖出屏幕,说说你的实现思路和注意事项
这个是不是滑动撞边的动画效果类似?思路:通过ondrophelper或者另一个方法实现拖拽效果,然后判断和屏幕的边距
你的意思是说 Button 会接收到 ACTION_CANCEL 事件吗?
阿里巴巴面试原题