2024年3月9日发(作者:)
return true
}
return false
}
})
}
override fun onTopChild(isTop: Boolean) {
isChildTop = isTop
}
override fun onScrollChain() {
/** child带动parent联动效果,快速滑动事件下发给self view*/
if(enableChildChain && isChildTop ) {
fling(0,velocityY/2)
}
}
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
if(enableConflict){
dispatchConflictTouchEvent(ev)
}
return chTouchEvent(ev)
}
private fun dispatchConflictTouchEvent(ev: MotionEvent){
//Log.e("xx","dispatchConfict action=${},dy=${ev.y}")
velocity?:{
velocity = ()
}.invoke()
velocity?.addMovement(ev)
when(){
_DOWN ->{
startdx = ev.x
startdy = ev.y
velocityY = 0
isMoveY = false
}
_MOVE ->{
conflictTouchEvent(ev)
}
_UP ->{
isSelfTouch = true
velocity?.let {
eCurrentVelocity(1000, t())
velocityY = -()
velocity?.recycle()
}
velocity = null
}
}
}
private fun conflictTouchEvent(ev: MotionEvent){
/** 纵向滑动处理,横向滑动过滤*/
if(isMoveY || (ev.y-startdy) > (ev.x-startdx)){
isMoveY = true
/** true 在底部*/
val isBottom = !canScrollVertically(1)
/** true向上滑动*/
val directUp = (ev.y - startdy) < 0
//Log.e("xx","isBootom=$isBottom,directUp=$directUp,ischildTop=$isChildTop,y=${ev.y}")
if(isBottom){
if(isChildTop && !directUp){
dispatchSelfTouch(ev)
dispatchSelfTouch(ev)
}else{
dispatchChildTouch(ev)
}
}else{
dispatchSelfTouch(ev)
}
}
}
/** 给selft view分发*/
private fun dispatchSelfTouch(ev: MotionEvent){
if(!isSelfTouch){
isSelfTouch = true
dispatchTouchEvent(obtainCancelEvent(ev.x, ev.y))
dispatchTouchEvent(obtainDownEvent(ev.x, ev.y))
}
}
/** 给child view分发*/
private fun dispatchChildTouch(ev: MotionEvent){
if (isSelfTouch){
isSelfTouch = false
dispatchTouchEvent(obtainCancelEvent(ev.x,ev.y))
dispatchTouchEvent(obtainDownEvent(ev.x,ev.y))
requestDisallowInterceptTouchEvent(true)
}
}
private fun obtainDownEvent(dx :Float, dy :Float) :MotionEvent{
return obtainActionEvent(_DOWN,dx,dy)
}
private fun obtainCancelEvent(dx :Float, dy :Float) :MotionEvent{
return obtainActionEvent(_CANCEL,dx,dy)
}
private fun obtainActionEvent(action :Int,dx :Float, dy :Float) :MotionEvent{
val now = Millis()
return (now,now,action,dx,dy,0)
}
}
发布评论