1

だから私が達成したいのは、ボタンの位置を変更することです。これは私のサンプル写真です:

注:
私のボタンには背景描画可能があります。たとえば、ボタンの背景画像なしでアップロードしました。

デフォルト
で

シャッフル時:

ここに画像の説明を入力

だから、これは私が取り組んでいるコードです:

        List<Integer> objects = new ArrayList<Integer>();
        objects.add(0);
        objects.add(1);
        objects.add(2);
        objects.add(3);
        objects.add(4);

    // Shuffle the collection
    Collections.shuffle(objects);

    List<Button> buttons = new ArrayList<Button>();

    buttons.add((Button) findViewById(R.id.bObject1Stage2_1));
    buttons.add((Button) findViewById(R.id.bObject2Stage2_1));
    buttons.add((Button) findViewById(R.id.bObject3Stage2_1));
    buttons.add((Button) findViewById(R.id.bObject4Stage2_1));
    buttons.add((Button) findViewById(R.id.bObject5Stage2_1));

    Collections.shuffle(buttons);

    for (int i = 0; i < objects.size(); i++) {
        //buttons.get(i).setText(objects.get(i).toString());
        buttons.get(i);
    }

しかし、それはボタンの位置を変えていません。ここで何が欠けていますか?どんな助けでも本当に感謝しています。ありがとう。

4

1 に答える 1

1

RelativeLayout.LayoutParamsを使用してボタン間で値を切り替えますsetLayoutParamsメソッドを使用してそれらを移動および適用したい

これにより、2 つのボタンの位置を切り替えることができます。それらをシャッフルするには、いくつかのスイッチを作成するためのアルゴリズムを準備する必要があります。

RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams) b1.getLayoutParams();
RelativeLayout.LayoutParams params2 = (RelativeLayout.LayoutParams) b2.getLayoutParams();

b1.setLayoutParams(params2);
b2.setLayoutParams(params1);

これは、これらのボタンが相互に関連していない場合にのみ機能します。たとえば、b2 が b1 に対して相対的であったため、それより下にある場合、addRuleメソッドを使用して b1 を b1 より下に設定し、b2 で removeRule を設定して、b1 に対して相対的にならないようにする必要があります。

たとえば、あなたはxmlにあります

 <Button
android:id="@+id/bObject2Stage2_1"
/*...*/
android:layout_toRightOf="@+id/bObject1Stage2_1" />

このルールを設定するには、次のように記述します

params.addRule(RelativeLayout.RIGHT_OF, R.id.bObject1Stage2_1);
于 2013-04-29T12:27:18.347 に答える