2014-09-25 31 views
0

我有一个,我想与对方交换随机它们的位置。我试过的东西,但它似乎没有工作,这是我尝试过,我知道这是不是随机的,但我想获得随机:Android如何随机调换按钮位置?

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

        } 

       } 

感谢

回答

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); 

     } 

    } 

然后,你这样做之后,只是链接的名称电话号码,并开始粘贴。例如,让我们想象约翰尼继续1,蒂菲继续2,迈克尔继续3,等等。只要搜索那个具有1并用蒂尼代替约翰尼2等等。我建议你让他们不可见你所做的一秒钟的数字值就是这样,以便它们不会在数字之间来回闪烁。或者你可以扩展按钮类/添加一个属性给按钮类,给他们一个索引。那么,一切都应该很好地工作!

+0

Thnx @DreadHeadedDeveloper – hackeveryone 2014-09-25 17:46:51

0

你不能改变的顺序LinearLayout中的视图。您可以删除视图并将它们添加回不同位置

ViewGroup.addView (View child, int index) 

这当然不是非常有效。

当你的按钮看起来都一样它可能是更容易只是改变他们的标签。

+0

是否可以更改ID和标签?因为我有一些功能,但也是我想要做的是,如果按钮1在10.1,按钮2在14.1和按钮3在18.1我想随机交换的位置,当用户得分指向按钮s混杂并说按钮1与按钮2和按钮2而不是按钮3等交换位置 - – hackeveryone 2014-09-25 15:01:09

+0

是的,当然,您可以更改视图标签。也可以更改视图ID,但我不建议这样做。相反,使用setTag和getTag方法将您需要的任何信息与按钮相关联。 – Okas 2014-09-25 15:01:26

+0

好Thnx会尝试 – hackeveryone 2014-09-25 15:04:55