Android如何随机交换按钮位置



我有一个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)

这当然不是很有效。

当你的按钮看起来都一样时,只需更改它们上的标签可能会容易得多。

最新更新