我有家庭活动,我有3个按钮:Move To A
,Move To B
和Move To C
。
点击这些按钮后,我导航到内部活动,其中我在HorizontalScrollView
内有3个布局,比如A
,B
和C
,其中包含几个观点。
现在我想要的是,内部活动应该根据家庭活动的点击按钮导航到3种布局中的一种,即
如果按下了家庭活动Move To A
,内部活动应该导航到布局A
,依此类推......
可能的解决方案可能是使用ScrollTo()
但是对于可变屏幕尺寸效率不高。
任何帮助表示感谢。
这不起作用:
RelativeLayout LayoutA = (RelativeLayout) findViewById(R.id.LayoutA);
HorizontalScrollView main = (HorizontalScrollView) findViewById(R.id.scrollview);
main.scrollTo(PoCLayout.getLeft(), 0);
即使这不起作用:
main.scrollTo(500, 0);
答案 0 :(得分:12)
如果main.scrollTo(500,0)
不起作用,请尝试:
main.post(new Runnable() {
@Override
public void run() {
main.scrollTo(500, 0);
}
}
在按钮的监听器中编辑:工作解决方案:
main.post(new Runnable() {
@Override
public void run() {
main.scrollTo(layoutX.getLeft(), 0);
}
}
答案 1 :(得分:2)
我不确定它是否有效,但您可以尝试调整布局A,B或C的位置,调用方法getLeft()
,然后使用scrollTo()
。
滚动到布局A的示例:scrollTo(a.getLeft(), 0);
答案 2 :(得分:2)
你可以在这里做一点数学
使用View.getLeft()
和View.getRight()
然后将每2的计算宽度除以滚动到视图中心
答案 3 :(得分:0)
使用:
final HorizontalScrollView scrollView= (HorizontalScrollView)
int speed=1000;
findViewById(R.id.main_scrollView);
final View view = findViewById(R.id.your_view);
ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() { view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
ObjectAnimator.ofInt(scrollView, "scrollY", (int) view.getX()).setDuration(speed).start();
}
});
答案 4 :(得分:0)
main.post(new Runnable() {
@Override
public void run() {
main.scrollTo(500,500);
}
}