所以我想要实现的是改变按钮的位置。这是我的样本图片:
注意:
我的按钮有背景可绘制,例如,我刚刚上传没有背景图像的按钮。
默认
改组时:
所以这是我正在处理的代码:
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);
}
但它并没有改变按钮的位置。我在这里想念的是什么?真的很感激任何帮助。感谢。
答案 0 :(得分:0)
使用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);