7

私は 2 人用のアプリケーションを作成しようとしていますが、両方ともその半分を表示するため、半分を垂直方向に反転する必要があります。を使用して、その中LinearLayoutに 2 つRelativeLayoutの sを使用していlayout_weight="1"ます。

問題は、このフリップを行う方法がわかりません。どうやらandroid:rotateバージョン 11+ (3.0+) でしか利用できないようですが、少なくとも 2.2 をサポートしてほしいです。

SOに関する他の関連する質問を読んだ後、さまざまなことを試しましたが、どれもうまくいかないようです。RelativeLayout を拡張して関数をオーバーライドしようとしましたが、onDraw何もしないようです。これが私のコードです:

public class FlippedRelativeLayout extends RelativeLayout
{
    public FlippedRelativeLayout(Context context)
    {
        super(context);
    }

    public FlippedRelativeLayout(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public FlippedRelativeLayout(Context context, AttributeSet attrs,
            int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        canvas.save();
        canvas.rotate(180);
        super.onDraw(canvas);
        canvas.restore();
    }
}

どんな助けでも嬉しいです、ありがとう!

4

2 に答える 2

9

これを試して:

public class MyRelativeLayout extends RelativeLayout {    
    public MyRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyRelativeLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyRelativeLayout(Context context) {
        super(context);
        init();
    }

    private void init() {
        setStaticTransformationsEnabled(true);
    }

    @Override
    protected boolean getChildStaticTransformation(View child, Transformation t) {
        t.setTransformationType(Transformation.TYPE_MATRIX);
        Matrix m = t.getMatrix();
        m.reset();
        m.postRotate(180, child.getWidth() / 2.0f, child.getHeight() / 2.0f);
        return true;
    }
}

結果は次のとおりです。 ここに画像の説明を入力

于 2013-06-14T09:24:59.060 に答える
1

とても興味深い質問です!

おそらく、部分的に透明な 2 つActivityの -s を作成して、同じレイアウト xml の独自のコピーを表示し、次にActivity移動する順番に応じてアクティブの「z オーダー」を切り替えることができます。

ActivityA は「独自の」アクティビティであり、透明な上半分とRelativeLayout下半分の を持ちます。次のような通常の画面の向きもありますsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

ActivityBは「あなたの対戦相手の活動」になります。また、透明な上半分と、下半分とまったく同じコピーがありRelativeLayoutます。ただし、次のように画面の向きが反転しますsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT)。これは、B の透明な部分がA の部分に重なり、Aの透明な部分ActivityB のRelativeLayout部分に重なることを意味します。ActivityActivityRelativeLayoutActivity

-sの対応する起動モードActivityを「シングルトップ」またはその他の適切な値に設定することもできます。これにより、Activity「再起動」するときに新しいインスタンスを作成しなくなります。つまり、「make-a-」を渡します。ムーブチケット」を相手に渡す。

残念ながら、...REVERSE_PORTRAITオリエンテーションは API レベル 9 (Android 2.3.something) まで追加されておらず、API レベル 8 を明示的に要求しています。

このアプローチの優れた点は、一度に 1 つのアクティビティしかフォーカスできない (つまり、入力を受け取る) ことができるため、ユーザー入力用のステートマシンを自動的に取得することです。あなたが動きをするまで彼/彼女のボードを、そしてその逆も同様です。

これにより、少なくともいくつかのアイデアが得られることを願っています。

乾杯!

于 2013-06-14T09:00:36.520 に答える