沃梦达 / IT编程 / 移动开发 / 正文

Android制作一个锚点定位的ScrollView

这篇文章主要介绍了Android制作一个锚点定位的ScrollView,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

经过上面的计算我们得到了这几个数据:

  • viewDistanceDifference:previousView与nextViewY坐标之差。即前后相距的距离
  • previousRatio:前一个View的逃离百分比,previousView与mPos的距离百分比。
  • nextRatio:下一个View的进入百分比,nextView与mPos的的距离百分比。

这样就算是完工了。

回调监听

最后我们将这些参数进行分类,交给页面去处理。

增加一个interface


 interface OnViewPointChangeListener {

        fun onScrollPointChange(previousDistance: Int, nextDistance: Int, index: Int)

        fun onScrollPointChangeRatio(
            previousFleeRatio: Float,
            nextEnterRatio: Float,
            index: Int,
            scrollPixel: Int,
            isScrollBottom: Boolean
        )

        fun onPointChange(index: Int, isScrollBottom: Boolean)
    }

将数据填入


    private fun computeView() {
    //忽略之前的计算代码
    。。。
//==============数据回调

        //触发锚点变化回调
        if (mViewPoint != scrollIndex) {
            mViewPoint = scrollIndex
            onViewPointChangeListener?.onPointChange(mViewPoint, isScrollBottom)
        }

        //触发滚动距离改变回调
        onViewPointChangeListener?.onScrollPointChange(
            previousViewDistance,
            nextViewDistance,
            scrollIndex
        )

        //触发 逃离进入百分比变化回调
        if (previousRatio in 0f..1f && nextRatio in 0f..1f) {
            //只有两个值在正确的范围之内才能进行处理否则打印异常信息
            onViewPointChangeListener?.onScrollPointChangeRatio(
                previousRatio,
                nextRatio,
                scrollIndex,
                previousViewDistance,
                isScrollBottom
            )
        } else {
            Log.e(
                TAG, "computeView:" +
                        "\n previousRatio = $previousRatio" +
                        "\n nextRatio = $nextRatio"
            )
        }
}

最后再看一眼完成的效果

这里的indicator用的是MagicIndicator。代码都再GitHub上了。大家自己观摩一下吧。

其实还是有很多优化的空间的。比如查找最相邻的两个View时的算法。在最后注册的1-3个view不足以滚动到顶部的时候,可以让index的变化更加优雅等等。。有待改进。

以上就是Android制作一个锚点定位的ScrollView的详细内容,更多关于Android 制作ScrollView的资料请关注编程学习网其它相关文章!

本文标题为:Android制作一个锚点定位的ScrollView