美文网首页
自定义View 自定义View 触摸反馈

自定义View 自定义View 触摸反馈

作者: 花椒人生 | 来源:发表于2018-12-23 23:42 被阅读0次

自定义View的触摸反馈

重写onTouchEvent(),在方法内部定制触摸反馈算法
是否取消事件取决于ACTION_DOWN事件或PONITER_DOWN事件是否返回true
MotionEvent
        getActionMasked()和getAction()
        POINTER_DOWN / POINTER_UP 和 getActionIndex()

onTouchEvent()

    当用户按下(ACTION_DOWN)
        如果不在滑动控件中,切换至按下状态,并注册长按计时器
        如果在滑动控件中,切换至按下状态,并注册按下计时器
    当进入按下状态并移动(ACTION_MOVE)
        重绘Ripple Effect
        如果移动出自己的范围,自我标记本次事件失效,忽略后续事件
    当用户抬起(ACTION_UP)
        如果是按下状态并且未触发长按,切换至抬起状态并触发点击事件,并清除一切状态
        如果已经触发长按,切换至抬起状态并清除一切状态
    当事件意外结束(ACTION_CANCEL)
        切换至抬起状态,并清除一切状态

自定义ViewGroup 的触摸反馈

    除了重写onTouchEvent(),还需要重写onInterceptEvent()
    onInterceptEvent() 不用在第一时间返回true,而是在任意事件,需要拦截的时候返回true就行

触摸反馈的流程

    Activity.dispatchEvent()
        递归:ViewGroup(View).dispatchTouchEvent()
            ViewGroup.onInterceptTouchEvent()
            ViewGroup.onIntercepTouchEvent()
            Child.dispatchTouchEvent()
            Super.dispatchEvent()
                View.onTouchEvent()
        Activity.onTouchEvent()

View.dispatchTouchEvent()

        如果设置了OnTouchListener,调用OnTouchListener.onTouch()
            如果OnTouchListener消费了事件,返回true
            如果onTouchListener没有了消费事件,继续调用自己的onTouchEvent(),并返回和onTouchEvent()相同的结果
        如果没有设置onTouchEvent,同上

ViewGroup.dispatchEvent()

        如果是用户初次按下(ACTION_DOWN),清空TouchTargets和DISALLOW_INTERCEPT标记
        拦截处理
        如果不拦截并且不是CANCEL事件,并且是DOWN或者POINTER_DOWN,尝试把pointer(手指)通过TouchTarget分配给子View;并且如果分配给了新的子View,调用child.dispathTouchEvent()把事件传递给子View
        看有没有TouchTarget
            如果没有TouchTarget,调用自己的super.dispatchTouchEvent()
            如果有,调用child.dispatchEvent()把事件传给对应的子View(如果有的话)
            如果是POINTER_UP,从TouchTargets中清除POINTER信息,如果是UP或CANCEL,重置状态

TouchTarget

        作用:记录每个子View是被哪些pointer(手指)按下的
        结构:单向链表

拦截处理

        如果不是初次按下,并且没有TouchTarget,直接拦截
        如果不是初次按下,或者有TouchTarget
            如果设置了disallow intercept,不拦截

否则,调用onInterceptTouchEvent(),如果返回true则拦截,返回false则不拦截

相关文章

  • 自定义View

    自定义View三个重点: 布局 绘制 触摸反馈

  • Android View 从测量布局到触摸反馈

    自定义View 在Android开发中,自定义 View 最关键的有三个点:绘制、布局和触摸反馈(绘制内容多而简单...

  • 自定义View 自定义View 触摸反馈

    自定义View的触摸反馈 重写onTouchEvent(),在方法内部定制触摸反馈算法 是否取消事件取决于ACTI...

  • 六大操作手势

    使用 touches 方法来监听 view 的触摸事件弊端: 必须得自定义 view, 在自定义的 View 当中...

  • 08-手势识别(点按,长按,轻扫)

    Make by:弓_虽_子 通过touches方法监听view触摸事件的缺点? 1.必须得自定义view,在自定义...

  • 手势

    监听触摸事件的做法 touches方法监听view触摸事件的缺点必须要自定义view无法让其他外界对象监听view...

  • Android View(转)

    自定义View的原理自定义View基础 - 最易懂的自定义View原理系列自定义View Measure过程 - ...

  • 自定义View系列

    自定义View1---知识储备自定义View2---View Measure过程自定义View3---View L...

  • 自定义View5---完整的自定义View

    移步自定义View系列 1.自定义view的分类自定义单一view(不含子view)继承view继承特定view如...

  • 自定义View

    自定义View系列文章 自定义View view向上滚动

网友评论

      本文标题:自定义View 自定义View 触摸反馈

      本文链接:https://www.haomeiwen.com/subject/rxmokqtx.html