2015-08-25 26 views
2

我正在創建一個拼圖比賽遊戲,爲了匹配兩個按鈕,你必須交換他們的位置。例如,我想將button1的位置與button2所在的位置交換。任何人都有什麼建議?如何交換android中兩個按鈕的位置?

這裏是我下面的代碼:

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import java.util.ArrayList; 
import java.util.Collections; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 

import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 


public class puzzle extends ActionBarActivity { 
    private TextView moveCounter; 
    private TextView feedbackText; 
    private Button[] buttons; 
    private Boolean bad_move=false; 
    // private static final Integer[] goal = new Integer[] {0,1,2,3,4,5,6,7,8}; 
    // private String [][] puz = new String [3][3]; 
    Button b [][]; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_puzzle); 



     swap(); 

    } 
    private void setBoard(){ 
     b = new Button[3][3]; 

     b[0][0]= (Button).findViewById(R.id.button1); 
     b[0][1]= (Button).findViewById(R.id.button2); 
     b[0][2] = (Button).FindById(R.id.button3); 
     b[1][0] = (Button).FindBdyId(R.id.button4); 
     b[1][1] = (Button).FindById(R.id.button5); 
     b[1][2] = (Button).FindById(R.id.button6); 
     b[2][0] = (Button).FindById(R.id.button7); 
     b[2][1] = (Button).FindById(R.id.button8); 
     b[2][2] = (Button).FindById(R.id.button9); 

    } 
    private void swap() { 
     b.setOnClickListener(new View.OnClickListener(){ 


      @Override 
      public void onClick(View v) { 

      } 
     }); 


    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_puzzle, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 
+0

你試過什麼?在這裏你只需要引用按鈕,而沒有更多。 –

+0

將對這兩個按鈕的引用互換,或將父對象列表中的引用彼此交換,而不是使父代佈局無效。通過編寫一個從LinearLayout,RelativeLayout等擴展的簡單自定義ViewGroup類,這可能會更容易... –

+0

我打算使用一個2d數組,將一個按鈕定位在這個索引處,並有一個if語句將它與下一個按鈕。 – user3261680

回答

0

如果您使用的API級別大於11,你可以使用的getX()和的getY()來獲得一個按鈕的座標。

和setX()和setY()在特定座標中設置按鈕。

例如,

// getting coordinates of button 
float posX = button.getX(); 
float posY = button.getY(); 

// setting button2 in the coordinates that we got above 
button2.setX(posX); 
button2.setY(posY); 
+0

好的!感謝您的幫助。我會嘗試一下。 – user3261680

+0

你試過了嗎? – Ash

+0

還沒有。但我正在做更多的研究。 – user3261680

0

我已經得到這個工作的方式類似你的方法,你原先公佈。試試這個鏡頭:

Button btnOne = (Button) findViewById(R.id.buttonOne); 
Button btnTwo = (Button) findViewById(R.id.buttonTwo); 

float posOneX = btnOne.getX(); 
float posOneY = btnOne.getY(); 

float posTwoX = btnTwo.getX(); 
float posTwoY = btnTwo.getY(); 

btnOne.setX(posTwoX); 
btnOne.setY(posTwoY); 

btnTwo.setX(posOneX); 
btnTwo.setY(posOneY);