视图可见后滚动
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);
单击按钮后视图变得可见后,我试图滚动到 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);