0

我有家庭活动,我有 3 个按钮Move To AMove To BMove To C

单击这些按钮后,我导航到内部活动,其中我在 a 中有 3 个布局HorizontalScrollView,比如ABC这些布局又包含几个视图。

现在我想要的是,内部活动应该导航到基于 Home 活动中单击的按钮的 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);
4

5 回答 5

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);
    }
}
于 2012-11-08T11:14:13.580 回答
2

我不确定它是否会起作用,但您可以尝试调用该方法获取布局 A、B 或 C 的位置,getLeft()然后使用scrollTo().
滚动到布局 A 的示例:scrollTo(a.getLeft(), 0);

于 2012-11-08T10:44:13.633 回答
2

你可以在这里做一点数学

使用View.getLeft()然后View.getRight()将计算出的宽度除以 2 以滚动到视图中心

于 2012-11-08T10:45:05.910 回答
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();
            }
        }); 
于 2017-07-19T19:56:06.670 回答
0
main.post(new Runnable() {
    @Override
    public void run() {
        main.scrollTo(500,500);
    }
}
于 2017-08-08T05:21:28.033 回答