2014-09-25 1 views
0

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

        } 

       } 

감사

답변

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는 Tiffy 등으로 바꿉니다. 분할 된 초는 번호 값을 거기에 놓아서 번호 사이에서 앞뒤로 번쩍 거리지 않도록합니다. 또는 단추 클래스를 확장하거나 단추 클래스에 특성을 추가하여 색인을 제공 할 수 있습니다. 그렇다면 모든 것이 잘 돌아갑니다!

+0

Thnx @DreadHeadedDeveloper – hackeveryone

0

당신의 순서를 변경할 수 있습니다 LinearLayout의 뷰입니다.

ViewGroup.addView (View child, int index) 

보기를 제거하고 다시 다른 위치에 추가 할 수 있습니다. 이는 그리 효율적이지 않습니다.

버튼이 모두 똑같아 보이면 라벨을 변경하는 것이 훨씬 쉽습니다.

+0

ID 및 라벨을 변경할 수 있습니까? 나는 몇 가지 기능을 가지고 있기 때문에 또한 노력하고 있는데, 버튼 1이 10.1, 버튼 2가 14.1, 버튼 3이 18.1 일 때 나는 무작위로 사용자의 점수를 가리키는 위치를 교환하고 싶다. 버튼이 뒤죽박죽이고 버튼 1이 버튼 3 대신에 버튼 2 및 버튼 2와 위치를 교환한다고 ... - – hackeveryone

+0

물론 뷰 레이블을 변경할 수 있습니다. 보기 ID를 변경할 수도 있지만 그렇게하지 않는 것이 좋습니다. 대신 setTag 및 getTag 메서드를 사용하여 필요한 정보를 단추와 연결하십시오. – Okas

+0

확인 Thnx가 시도 할 것입니다 – hackeveryone

관련 문제