Tab 模块 (一)

Tab 模块 (一)

MoveMenu extends FrameLayout, 可以响应手势或者按钮出现/消失.
提供了几种手势滑动方向,并且是可以set的并且在APP的setting中持久化.


<1>手势滑动方向被enum化:
UNDEFINED,
LEFT,
RIGHT,
LEFT_RIGHT,
FORBID_DRAG,
TOP
并保存为成员变量<M>
有private的setter<因为在某些情况下不能乱设>和public的getter
updateMode()会考虑到当前的orentation和setting中设置.


<2>在几种情况下,Menu不应该被显示:
有别的Menu出现
下面的MainView中ViewPager被touch
VKB出现
通过监听这些event来维护一个 mShouldAppear的flag


<3>对于自定义的View,要初始化指向其内部View的引用,onFinishInflate()是一个很好的时机,在super的onFinishInflate()
被调用以后,View对象都已经被构造,可以通过findViewById得到其引用了.
对于View来说,也可以在这个时候register listener<不过我更喜欢在 onAttachToWindow,FinishInflate不代表已经显示在window了>


<4>开放出Listen接口,提供对Menu一些行为(openBegin/openEnd/close等)的监控.


<5>此Menu内部有一个container<是通过与xml文件中在里面增加了一个FrameLayout作为container实现的,这样不好,在于code和layout
 xml 耦合了>,用于放置真正要显示的MenuView<这个MenuView有setter/getter>.


<6>public的show/hideMenu<输入参数指示是否需要渐变动画>/toggle<二元切换,包装函数>


<7>需要能够检测Menu是否已经显示,这里要用isShown()<Returns the visibility of this view and all of its ancestors>,
用VISIBLITY检测不能保证View的parent是可见的.当然还要检测menuView是不是null为前提.


<8>为了检测move,需要定一个moveThreshold,这个值是以dp单位的,在构造时获得了DisplayMetric的density后会转为px<在touch中的
x/y都以px为单位>.


<9>为了检测更为复杂的Touch操作,使用了GestureDetector,extends一个GestureDetector.SimpleOnGestureListener<非抽象类,
不用检测所有的TouchEvent,因此可以用这个,这个simple版提供了所有空实现,比实现接口方便>
作为构造函数就可以了.
为了进一步抽离逻辑,该Listener检测到的TouchEvent<down scroll fling SingleTapUp>全部转发给一个专门处理
Touch相关的TouchController<主力C>.
不过该Listener会做一些简单的无效Touch检测排除<检测null的motionEvent>,以及对disableMove flag的check.
禁止GestureDetector检测长按.


<10>一般为了实现比较复杂的手势操作,只override onTouchEvent是不够的, onInterceptTouchEvent也会参与,<dispatchTouchEvent
一般很少o
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值