制作一个锚点定位的ScrollView,面试官

本文详细介绍了如何在Android中制作一个锚点定位的ScrollView,包括计算距离、百分比和回调监听。通过遍历注册的View,找到相邻的前后两个View,并计算滚动比例,最后实现滚动回调监听。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//当前值大于Tag
if (value - tag == min(value - tag, rightVal - tag)) {
rightVal = value
}
}
}

println(" left=leftValtag=leftVal tag=leftValtag=tag right=$rightVal")
}

大家也可以自己运行一下例子修改tag的大小来验证一下。

我们通过这个简单的算法,抽象的应用到我们的业务逻辑中。

private fun computeView() {
mPos ?: return
if (registerViews.isEmpty()) return
//判断是否滚动到底部了,后面会用到
val isScrollBottom = scrollY == getMaxScrollY()
//检索相邻两个View
//前一个View缓存
var previousView = ViewPos(null, 0, Int.MIN_VALUE)
//下一个View缓存
var nextView = ViewPos(null, 0, Int.MAX_VALUE)
//当前滚动的View下标
var scrollIndex = -1
//通过遍历注册的View,找到当前与定点触发位置相邻的前后两个View和坐标位置
//[这个查找算法查看 [com.example.scrollview.
ExampleUnitTest]
registerViews.forEachIndexed { index, it ->
val viewPos = updateViewPos(it)
if (mPos!!.Y >= viewPos.Y) {
if (mPos!!.Y.toLong() - viewPos.Y == min(
mPos!!.Y.toLong() - viewPos.Y,
mPos!!.Y.toLong() - previousView.Y
)
) {
scrollIndex = index
previousView = viewPos
}
} else {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值