视图可见后滚动

Scroll after view becomes visible

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

button.setOnClickListener(v -> {
    constraintLayout.setVisibility(View.VISIBLE);
    scrollView.smoothScrollTo(0, constraintLayout.getBottom());
}
button.setOnClickListener(v -> {
    constraintLayout.setVisibility(View.VISIBLE);
    Handler handler = new Handler();
    handler.postDelayed(() -> {
        scrollView.smoothScrollTo(0, constraintLayout.getBottom());
    }, 100);
}

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

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

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);