股票场内基金交易,没时间盯盘?

   
使用优财助手电脑客户端记录下您的股票买入卖出数据,能帮您时刻盯盘,会根据您记录的未售出买入价计算上涨或下跌幅度,及时弹框通知您。想知道如何使用?快点击左方视频观看了解吧~~下载地址:http://youcaizhushou.com

前言

上周我们用 demo 分析了 Android 触摸事件的分发过程,这周我们将尝试从源码的角度分析 Android 触摸事件的分发过程。

Activity 对触摸事件的分发

当一个触摸事件发生时,最先传递给 Activity,由 Activity 的 dispatchTouchEvent 方法进行事件的分发。

由上面源码的第五行可以看出事件会交给 Window 的 superDispatchTouchEvent 方法进行处理。通过跟踪源码可以得知 Window 的 superDispatchTouchEvent 方法是个抽象方法。而 PhoneWindow 是 Window 的唯一实现类。因此事件交由 PhoneWindow 的 superDispatchTouchEvent 方法处理。

由上面源码可知,事件交给了 DecorView 的 superDispatcTouchEvent 方法。

DecorView 的 superDispatcTouchEvent 方法又调用了其父类的 dispatchTouchEvent 方法。DecorView 的父类是 FrameLayout,而 FrameLayout 的父类是 ViewGroup。但是 FrameLayout 里没有 dispatchTouchEvent 所以此处的 dispatchTouchEvent 方法就是调用的 ViewGroup 的 dispatchTouchEvent 方法。

ViewGroup

dispatchTouchEvent

由于这个方法比较长,这里分段说明。

这段代码是判断是否要拦截当前事件。当事件是 ACTION_DOWN 或者 mFirstTouchTarget != null 时将判断是否要拦截事件。ACTION_DOWN 好理解,但是 mFirstTouchTarget != null 是什么意思?这里我们暂且不管,后面将给出解释。

这里我们需要注意 FLAG_DISALLOW_INTERCEPT 这个标记位。这个标记位是通过 requestDisallowInterceptTouchEvent 方法来设置的,一般用于子 View 中。FLAG_DISALLOW_INTERCEPT 一旦设置后,ViewGroup 将无法拦截除了 ACTION_DOWN 以外的其他事件。

上面这段代码是遍历 ViewGroup 的所有子元素,然后判断子元素是否能接受到事件。是否能接受事件主要有两点判断:子元素是否在播放动画和触摸事件的坐标是否落在子元素的区域内。由源码可以得知,dispatchTransformedTouchEvent 调用了子元素的 dispatchTouchEvent 方法。如果子元素成功处理事件,则会执行 if 里面的代码。注意 48 行 addTouchTarget 方法。

在这里设置了 mFirstTouchTarget ,回到刚开始判断是否要拦截事件的时候,有一个 mFirstTouchTarget != null 的条件。这里我们知道如果有子元素处理了事件 mFirstTouchTarget != null 成立。

如果遍历了所有子元素后事件都没有被处理,这里有两种情况:第一,ViewGroup 中没有子元素;第二种,子元素处理事件,但是 dispatchTouchEvent 返回了 false,这一般是因为子元素在 onTouchEvent 中返回了 false。在这两种情况下 ViewGroup 会自己处理点击事件。

View

dispatchTouchEvent

从源码可以看出 View 对事件的处理过程,首先会判断有没有设置
OnTouchListener,如果 OnTouchListener 中的 onTouch 方法返回 true,那么 onTouchEvent 就不会被调用,否则将会执行。

onTouchEvent

由上面的代码可以看出即使 View 处于 DISABLED 状态时也是会消耗事件的。

由上面源码可以看出,只要 View 的 CLICKABLE 和 LONG_CLICKABLE 有一个为 true 那么它就会消耗这个事件,即 onTouchEvent 返回 true。

View 的 LONG_CLICKABLE 默认为 false,而 CLICKABLE 是否为 false 和具体的 View 有关,即可点击的 View 的 CLICKABLE 为 true ,不可点击的为 false。通过 setOnClickListener 和 setOnLongClickListener 可以分别将 View 的 CLICKABLE 和 LONG_CLICKABLE 设为 true。具体代码不再贴出。

   

想获得去掉 5 元限制的证券账户吗?

证券交易股票基金的佣金,不足 5 元会按照 5 元收取。比如交易 1000 元的股票,按照普遍的证券佣金手续费率万 2.5,其交易佣金为 0.25 元,小于 5 元,实际会收取佣金 5 元,买卖两次需要支付 10 元佣金成本,1% 的利润就这样没了。

如果您想去掉最低交易佣金 5 元限制,使用微信扫描左边小程序二维码,访问微信小程序「优财助手」,点击底部菜单「福利」,阅读文章「通过优财开证券账户无最低交易佣金 5 元限制」,按照文章步骤操作即可获得免 5 元证券账户,股票基金交易手续费率万 2.5。

请注意,一定要按照文章描述严格操作,如错误开户是无法获得免 5 元证券账户的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注