【问题标题】:Scroll after view becomes visible视图可见后滚动
【发布时间】:2021-03-06 12:18:54
【问题描述】:

在单击按钮后视图变为可见后,我试图滚动到滚动视图的底部。问题是在视图实际可见之前应用了 scrollTo 函数。我知道这一点,因为当按钮被按下两次时,它会在第二次点击时滚动到底部。 那么,有没有办法在视图可见后滚动呢?

button.setOnClickListener(v -> {
    constraintLayout.setVisibility(View.VISIBLE);
    scrollView.smoothScrollTo(0, constraintLayout.getBottom());
}

【问题讨论】:

    标签: android-studio visibility android-scrollview visible


    【解决方案1】:
    button.setOnClickListener(v -> {
        constraintLayout.setVisibility(View.VISIBLE);
        Handler handler = new Handler();
        handler.postDelayed(() -> {
            scrollView.smoothScrollTo(0, constraintLayout.getBottom());
        }, 100);
    }
    

    我刚刚发现这是可行的,但我希望不要使用延迟。

    【讨论】:

    • 如果有人在没有延迟的情况下提出一个不同的答案,我会接受一个不同的答案。
    【解决方案2】:

    另一种选择是使用监听器。

    ViewTreeObserver.OnPreDrawListener viewVisibilityChanged = new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            if (my_view.getVisibility() == View.VISIBLE) {
                scroll_view.smoothScrollTo(0, scroll_view.getHeight());
            }
            return true;
        }
    };
    

    您可以通过这种方式将其添加到您的视图中:

    my_view.getViewTreeObserver().addOnPreDrawListener(viewVisibilityChanged);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-12
      • 2013-10-02
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      相关资源
      最近更新 更多