onclick按钮替换按钮的位置

时间:2014-06-17 12:07:50

标签: android button random action coordinate

我创建了一个有6个按钮的游戏,当你点击button2时按钮应该改变它们的位置,这是我做的脚本:

if (id == R.id.button2) {


            action1();
            action2();
            action3();
            action4();
            action5();
            action6();

            }

以下是行动:

private void action1() {
    // TODO Auto-generated method stub
    Button button1 = (Button)findViewById(R.id.button1);
    button1.setX(50);
    int min = 0;
    int max = 200;
    Random r = new Random();
    int i1 = r.nextInt(max - min + 1) + min;
    button1.setY(i1);
    }   
private void action2() {
    // TODO Auto-generated method stub
    Button button2 = (Button)findViewById(R.id.button2);
    button2.setX(50);
    int min = 0;
    int max = 1200;
    Random r = new Random();
    int i1 = r.nextInt(max - min + 1) + min;
    button2.setY(i1);       }  
private void action3() {
    // TODO Auto-generated method stub
    Button button3 = (Button)findViewById(R.id.button3);
    button3.setX(50);
    int min = 400;
    int max = 600;
    Random r = new Random();
    int i1 = r.nextInt(max - min + 1) + min;
    button3.setY(i1);       }  
private void action4() {
    // TODO Auto-generated method stub
    Button button4 = (Button)findViewById(R.id.button4);
    button4.setX(50);
    int min = 600;
    int max = 800;
    Random r = new Random();
    int i1 = r.nextInt(max - min + 1) + min;
    button4.setY(i1);       }  
private void action5() {
    // TODO Auto-generated method stub
    Button button5 = (Button)findViewById(R.id.button5);
    button5.setX(50);
    int min = 800;
    int max = 1000;
    Random r = new Random();
    int i1 = r.nextInt(max - min + 1) + min;
    button5.setY(i1);       }  
private void action6() {
    // TODO Auto-generated method stub
    Button button6 = (Button)findViewById(R.id.button6);
    button6.setX(50);
    int min = 1000;
    int max = 1200;
    Random r = new Random();
    int i1 = r.nextInt(max - min + 1) + min;
    button6.setY(i1);       
    }  

我的问题是:按钮会将其位置更改为另一个按钮,因此您无法按下按钮,我该怎么做才能解决此问题?

我想到了这个选项:

得到按钮和顶部的Y坐标,除以6,然后我知道每个按钮应该给出的Y坐标范围是什么,我该怎么办?或者你能告诉我一个更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您的代码中存在几个问题。首先,您应该重用可以重用的任何资源。在这种情况下,您应该存储对按钮和随机的引用。您的数字始终相同,因此您可以将它们声明为类变量。最后,你可以通过记住"被占用的"来解决你的问题。位置。

P.S。不要忘记不同的屏幕有不同的分辨率。

工作代码!=好代码。此外,还有一个名为DRY的节目指南 - 不要重复自己。你的代码远没有DRY。通常,如果您多次复制代码 - 将其包装在方法中,而不是复制正文。你的6种动作方法可以少写5行:

private void action(Button b, int min, int max){
    b.setX(50); 
    b.setY(r.nextInt(range));
}

将Buttons和Random定义为类变量,以便重用它们:

public class MyClass extends Activity{
Random rl
Button button1;
...
Button button6;
//List<Button> buttons = new ArrayList<Button>(); might be even better

的onCreate:

r = new Random();
button1 = (Button)findViewById(R.id.button1);
...
button6 = (Button)findViewById(R.id.button6);

当你点击它们时:

if(id==R.id.button2){
    action(button1,0,200);
    ...
}

要保持按钮分开,请检查随机值是否与所有按钮都不重叠:

int getRandom(int min,int max){
    int val = r.nextInt(range);
    if(button1.getY()>val&&button1.getY()+width<val){
        //buttons overlap, try another random value
    } else {
        //check other buttons
    }
}