手写ViewPager

2020-05-13  本文已影响0人  王灵
    private val viewConfiguration = ViewConfiguration.get(context)
    private var scaledPagingTouchSlop = viewConfiguration.scaledPagingTouchSlop//触发移动的最小距离
    private var scaledMinimumFlingVelocity = viewConfiguration.scaledMinimumFlingVelocity//惯性滑动的最小滑动速度
    private var scaledMaximumFlingVelocity = viewConfiguration.scaledMaximumFlingVelocity//惯性滑动的最大滑动速度
    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        measureChildren(widthMeasureSpec, heightMeasureSpec)//所有的子view都以这个尺寸为最大来自测
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
    }
    private val velocityTracker = VelocityTracker.obtain()

    velocityTracker.addMovement(event)//添加event
    velocityTracker.computeCurrentVelocity(1000,scaledMaximumFlingVelocity.toFloat())//计算1000ms内移动的像素值,并设置最大速度
    velocityTracker.xVelocity//获得X轴的速度(必须先调用computeCurrentVelocity)
    velocityTracker.yVelocity//获得Y轴的速度

    velocityTracker.clear()//
    scrollTo(x,y)//对view内部的所有进行偏移
    private val overScroller = OverScroller(context)
    overScroller.computeScrollOffset()//动画是否正在进行
    overScroller.startScroll(startX,  startY,  dx,  dy)//提供起点和滑动距离的动画
    postInvalidateOnAnimation()

整体的实现思路

上一篇下一篇

猜你喜欢

热点阅读