2014-09-25 63 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