简单的仿淘宝京东详情页效果

自定义ScrollView实现ScrollView不惯性滑动

class NoFlyingScrollView(context:Context, attr: AttributeSet):ScrollView(context,attr){
    override fun fling(velocityY: Int) {
//        super.fling(0)
    }
}
复制代码

Touch事件监听

scroll.setOnTouchListener({v,event->
            when(event.action){
                MotionEvent.ACTION_CANCEL,
                MotionEvent.ACTION_UP -> {
                    Log.d("--->","scroll.height="+scroll.height+"   event.rawY="+event.rawY+"  top.height="+top.height+"  scroll.scrollY"+scroll.scrollY+"  top.scrollY="+top.scrollY)
                    if(showingTop){//正在展示顶部
                        if(scroll.height+scroll.scrollY<top.height){//小于topView的高度
                            showingTop=true
                            return@setOnTouchListener false
                            //滚动高度大于topView小于topView+安全距离
                        }else if(scroll.height+scroll.scrollY>top.height&&scroll.height+scroll.scrollY<top.height+spaceDistance){
                            scroll.smoothScrollTo(0,top.height-scroll.height)
                            showingTop = true
                            return@setOnTouchListener true
                            //滚动高度大于topview高度加安全距离
                        }else if(scroll.height+scroll.scrollY>top.height+spaceDistance){
                            scroll.smoothScrollTo(0,top.height)
                            showingTop = false
                            return@setOnTouchListener true
                        }
                    }else{//正在展示下面的view
                        //滚动高度小于topview-安全距离
                        if (scroll.scrollY<top.height-spaceDistance){
                            scroll.smoothScrollTo(0,0)
                            showingTop = true
                            return@setOnTouchListener true
                            //滚动高度大于topView-安全距离且小于topView
                        }else if(scroll.scrollY>top.height-spaceDistance&&scroll.scrollY<top.height){
                            scroll.smoothScrollTo(0,top.height)
                            showingTop = false
                            return@setOnTouchListener true
                        }else if(scroll.scrollY>top.height){
                            showingTop = false
                            return@setOnTouchListener false
                        }
                    }

                }
                MotionEvent.ACTION_MOVE->{
                }
            }
            false
        })
复制代码

转载于:https://juejin.im/post/5be2502e518825170c36686e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值