在NestedScrollView中平滑滚动到Child

Nea*_*999 13 android nestedscrollview

我在CardView父母的内部有可扩展的视图NestedScrollView.当扩展动画结束时,我正在尝试为子项创建平滑滚动.但我发现只有一个解决方案:

 scrollView.requestChildFocus(someView, someView);
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,但是,当requestChildFocus它调用时它立即滚动,这让我很烦恼.是否可以顺利滚动到孩子?

Nea*_*999 17

childView,而我想滚动,有CardViewparrent,所以childView.getTop()返回相对值CardView不至ScrollView.所以,为了得到最高的相对于ScrollView我应该得到childView.getParent().getParent()然后把它投入View并打电话getTop().

滚动位置计算如下

int scrollTo = ((View) childView.getParent().getParent()).getTop() + childView.getTop();
nestedScrollView.smoothScrollTo(0, scrollTo);
Run Code Online (Sandbox Code Playgroud)


H0W*_*ARD 6

更多 @jerry-sha 的答案

fun NestedScrollView.smoothScrollTo(view: View) {
  var distance = view.top
  var viewParent = view.parent
  //traverses 10 times
  for (i in 0..9) {
    if ((viewParent as View) === this) break
    distance += (viewParent as View).top
    viewParent = viewParent.getParent()
  }
  smoothScrollTo(0, distance)
}
Run Code Online (Sandbox Code Playgroud)