在scrollview中,如果我在中间添加任何视图,通常所添加视图下方的所有视图都会向下滚动。但是我想在不打扰底部视图的情况下将添加视图的顶视图向上滚动。在scrollview中是否可以帮助我?
在图中,如果添加了视图4,则必须向上滚动视图1,而不更改视图2和视图3的位置。
答案 0 :(得分:0)
你可以获得你正在添加的视图的高度,然后手动滚动滚动视图那么多像素
scrollView.scrollBy(0, viewAdded.getHeight())
答案 1 :(得分:0)
我一直想尝试这个问题很长一段时间,我终于有机会了。该方法非常简单(事实上,@ dweebo之前已经提到过) - 我们在添加视图时向上移动ScrollView
。为了在添加时获得精确(且有效)的维度,我们使用ViewTreeObserver
。以下是您可以从中获得提示的代码:
// Getting reference to ScrollView
final ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView);
// Assuming a LinearLayout container within ScrollView
final LinearLayout parent = (LinearLayout) findViewById(R.id.parent);
// The child we are adding
final View view = new View(ScaleActivity.this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100);
view.setLayoutParams(params);
// Finally, adding the child
parent.addView(view, 2); // at index 2
// This is what we need for the dimensions when adding
ViewTreeObserver viewTreeObserver = parent.getViewTreeObserver();
viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
parent.getViewTreeObserver().removeOnPreDrawListener(this);
scrollView.scrollBy(0, view.getHeight());
// For smooth scrolling, run below line instead
// scrollView.smoothScrollBy(0, view.getHeight())
return false;
}
});