0

Move To Aと の 3 つのボタンがあるホーム アクティビティがありMove To BますMove To C

これらのボタンをクリックすると、たとえば 内に 3 つのレイアウトがあり、いくつかのビューで構成される内部アクティビティに移動HorizontalScrollViewAます。BC

今私が欲しいのは、内部アクティビティは、ホームアクティビティからクリックされたボタンに基づいて、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

うまくいくかどうかはわかりませんが、メソッドgetLeft()を呼び出してレイアウト A、B、または C の位置を取得してから、 を使用できますscrollTo()
レイアウト A にスクロールする例:scrollTo(a.getLeft(), 0);

于 2012-11-08T10:44:13.633 に答える
2

ここでちょっとした数学ができます

ビューの中央にスクロールするには、計算された幅を 2 ​​で割りView.getLeft()ます。View.getRight()

于 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 に答える