0

次の問題があります。RealViewSwitcherクラス(ViewGroupを拡張し、ここで見つけることができます)を使用しています。私は3つのビューを持っており、それらの間をスワイプすると両方のオリエンタトンでうまく機能します。ただし、向きを動的に変更すると(たとえば、垂直ビューで画面1にいて、向きを水平に変更すると)-ビューは部分的にしか表示されません(画面の3分の1が最初のビューで、残りの3分の2が2番目です)見る)。

コード:

// my activity method
@Override
public void onConfigurationChanged(Configuration newConfig)
{
// ...
realViewSwitcher.setCurrentScreen(1);
// ...
}

// realViewSwitcher method
public void setCurrentScreen(int currentScreen) {
    mCurrentScreen = Math.max(0, Math.min(currentScreen, getChildCount() - 1));
    scrollTo(mCurrentScreen * getWidth(), 0);
    invalidate();
}

UPD(10.09.2012):いくつかのコードを追加しました

4

1 に答える 1

2

次のスニペットをRealViewSwitcherクラスに追加します。

public void orientationSnapToScreen(Context ctx)
        {
            Display display = ((WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
            int displayWidth = display.getWidth();

            mNextScreen = Math.max(0, Math.min(getCurrentScreen(), getChildCount() - 1));
            final int newX = mNextScreen * displayWidth;
            final int delta = newX - getScrollX();

            mScroller.startScroll(getScrollX(), 0, delta, 0, 0);
        }

RealViewSwitcherクラスを呼び出しているメインアクティビティに次のメソッドを追加します

@Override
    public void onConfigurationChanged(Configuration newConfig) 
    {
        super.onConfigurationChanged(newConfig);
        realViewSwitcher.orientationSnapToScreen(this);
    }
于 2012-10-13T05:58:49.350 に答える