滚动到特定视图

时间:2012-11-08 10:35:20

标签: android android-layout horizontalscrollview

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

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

现在我想要的是,内部活动应该根据家庭活动的点击按钮导航到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);

5 个答案:

答案 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);
    }
}