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 上删除规则,这样它就不再相对于 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 回答