我有一个LinearLayout
和9个Buttons
,我想随机交换它们的位置。我尝试了一些东西,但似乎不起作用,这是我尝试的,我知道这不是随机的,但我想随机:
float pos0,pos1,pos2,pos3,pos4,pos5,pos6,pos7,pos8,pos9;
float place1,place2,place3,place4,place5,place6,place7,place8,place9;
pos0=btn0.getX();
pos1=btn1.getX();
pos2=btn2.getX();
pos3=btn3.getX();
pos4=btn4.getX();
pos5=btn5.getX();
pos6=btn6.getX();
pos7=btn7.getX();
pos8=btn8.getX();
pos9=btn9.getX();
float [] arrange1 = {
pos0,pos1,pos2,pos3,pos4,pos5,pos6,pos7,pos8,pos9
};
float [] arrange2 = {
pos0,pos1,pos2,pos3,pos4,pos5,pos6,pos7,pos8,pos9
};
for(int i=0;i<10;i++){
place1=random(arrange1);
place2=random2(arrange2);
if(place1==place2){
place1=pos0;
place2=pos9;
}
while(place1!=place2){
if(i==1){
btn0.setX(place2);
btn1.setX(place1);
}
if(i==2){
btn2.setX(place2);
btn3.setX(place1);
}
if(i==3){
btn4.setX(place2);
btn5.setX(place1);
}
if(i==4){
btn6.setX(place2);
btn7.setX(place1);
}
if(i==5){
btn8.setX(place2);
btn9.setX(place1);
}
if(i==6){
btn0.setX(place2);
btn2.setX(place1);
}
if(i==7){
btn2.setX(place2);
btn7.setX(place1);
}
if(i==8){
btn9.setX(place2);
btn1.setX(place1);
}
if(i==9){
btn4.setX(place2);
btn2.setX(place1);
}
}
}
感谢
我会把所有按钮放在一个ArrayList中,然后使用Math.Rom随机选择其中一个按钮并将其放在屏幕上,从ArrayList删除所述按钮,然后重复。这样,你就可以在不破坏的情况下重新排列。在重新排列之前,我会转到每个按钮,并设置Visible(false)以防止混淆。
如果工作量太大,我在另一个回复中看到,你问你是否可以更改按钮的标签。绝对地这实际上是一个更好的主意。我本来会在那里回应的,但我的评分还不够高,无法发表评论。
无论如何,如果你正在进行重命名选项,你可以按照。。。
public void rearrange()
{
int[] nums = new int[10];
int holder;
Random r = new Random();
boolean doesItMatch = true;
holder = r.nextInt(10);
for(int j = 0; j < 10; j++)
{
nums[j] = 10;
}
//^^This for loop is just to give them a value to start with so they won't be null.
//I assume the buttons will already have values by the time it's time to scramble
for(int i = 0; i < 10; i++)
{
do
{
doesItMatch = false;
for(int k = 0; k < 10; k++)
{
if(nums[k] == holder)
{
doesItMatch = true;
holder = r.nextInt(10);
k = 10;
}
}
}while(doesItMatch);
nums[i] = holder;
r.nextInt(10);
}
}
然后,完成后,只需将名称链接到数字并开始粘贴即可。例如,让我们假设Johnny是1,Tiffy是2,Michael是3,等等。只需搜索一个有1的,然后用Johnny替换,用Tiffy替换2,等等。我建议你在把数值放在那里的那一瞬间让它们不可见,这样它们就不会在数字之间来回闪烁。或者,您可以扩展按钮类/向按钮类添加一个属性,为它们提供索引。那么,一切都会很顺利的!
您不能在LinearLayout中更改视图的顺序。您可以使用删除视图并将其添加回不同的位置
ViewGroup.addView (View child, int index)
这当然不是很有效。
当你的按钮看起来都一样时,只需更改它们上的标签可能会容易得多。