以前,我有以下ScrollView
和布局。它的滚动直到选定的视图可见代码有效。
<ScrollView>
<LinearLayout>
<Info View 1/>
<Info View 2/>
<Info View 3/>
</LinearLayout>
</ScrollView>
private void initScrollView() {
if (this.selectedInfoView == null) {
// Nothing to scroll.
return;
}
ScrollView scrollView = (ScrollView)this.getView().findViewById(R.id.scrollView);
Rect rect = new Rect();
Rect scrollViewRect = new Rect();
selectedInfoView.getHitRect(rect);
scrollView.getDrawingRect(scrollViewRect);
int dy = rect.bottom - scrollViewRect.bottom;
if (dy > 0) {
scrollView.scrollBy(0, dy);
}
}
注意,getHitRect
将坐标返回到上一级父级。因此,上面的代码将起作用。
但是,当涉及到稍微复杂的情况时。上面的代码不再起作用。
<ScrollView>
<LinearLayout 0>
<TextView/>
<LinearLayout 1>
<Info View 1/>
<Info View 2/>
<Info View 3/>
</LinearLayout>
<TextView/>
<LinearLayout 2>
<Info View 4/>
<Info View 5/>
<Info View 6/>
</LinearLayout>
</LinearLayout>
</ScrollView>
在我的代码中,如果遇到Info View 1 - 3,我需要考虑LinearLayout 0和LinearLayout 1。getHitRect
谈到Info View 4-6,我需要考虑LinearLayout 0和LinearLayout 2。getHitRect
事情看起来很麻烦。有什么方法可以让我获得视图的坐标,相对于 top most ScrollView
?