Android如何随机交换按钮位置?

时间:2014-09-25 14:12:07

标签: java android android-layout

我有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);
                    }   

                    }

                }

由于

2 个答案:

答案 0 :(得分:0)

您无法在LinearLayout中更改视图的顺序。您可以使用

删除视图并将其添加回不同的位置
ViewGroup.addView (View child, int index)

当然这不是很有效。

当您的按钮看起来完全相同时,更改它们上的标签可能会更容易。

答案 1 :(得分:0)

我将所有按钮放在ArrayList中,然后使用Math.Random随机选择其中一个按钮并将其放在屏幕上,从ArrayList中删除所述按钮,然后重复。这样,您可以重新排列而不会破坏。在重新排列之前,我会转到每个按钮,并设置SetVisible(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并用John替换,2用Tiffy等等。我建议你让它们看不见你将数字值放在那里,以便它们不会在数字之间来回闪烁。或者您可以扩展按钮类/向按钮类添加属性,为其提供索引。然后,一切都应该很好地完成!