在android中启动不同的按钮计时器

时间:2012-10-18 13:35:00

标签: android

我的应用程序有几个按钮,它们上面的文字是一个计数器。每个按钮带有不同的计数器。我想独立开始我想要的2个。我的问题是,当我按下一个按钮时,所有其他按钮计数器开始。因此,当按下一个按钮时,我有许多按钮来启动计数器。我知道有很多lol应用程序,但我想练习编码android:P我知道问题是onTick方法。但我不知道如何为每个按钮调用许多onTick方法,或者在onTick中使用if / switch语句。任何人都知道我该怎么做?

感谢你的时间

public class TimersActivity extends Activity {

Button wraith, wolf, golem, blue_golem, red_golem, enemy_wraith, enemy_wolf, enemy_golem, enemy_blue_golem, enemy_red_golem, dragon, baron;

final MyCounter wraithTimer = new MyCounter(50000,100, wraith);
final MyCounter enemy_wraithTimer = new MyCounter(50000,100, wolf);

final MyCounter wolfTimer = new MyCounter(60000,100, null);
final MyCounter enemy_wolfTimer = new MyCounter(60000,100, null);
final MyCounter golemTimer = new MyCounter(60000,100, null);
final MyCounter enemy_golemTimer = new MyCounter(60000,100, null);
final MyCounter blue_golemTimer = new MyCounter(300000,100, null);
final MyCounter enemy_blue_golemTimer = new MyCounter(300000,100, null);
final MyCounter red_golemTimer = new MyCounter(300000,100, null);
final MyCounter enemy_red_golemTimer = new MyCounter(300000,100, null);
final MyCounter dragonTimer = new MyCounter(360000,100, null);
final MyCounter baronTimer = new MyCounter(420000,100, null);

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_timers);

        wraith = (Button)findViewById(R.id.wraiths);
        wolf = (Button)findViewById(R.id.wolfs);
        golem = (Button)findViewById(R.id.golems);
        blue_golem = (Button)findViewById(R.id.blue_golem);
        red_golem = (Button)findViewById(R.id.redbuff_creep);
        enemy_wraith = (Button)findViewById(R.id.enemy_wraiths);
        enemy_wolf = (Button)findViewById(R.id.enemy_wolfs);
        enemy_golem = (Button)findViewById(R.id.enemy_golems);
        enemy_blue_golem = (Button)findViewById(R.id.enemy_blue_golem);
        enemy_red_golem = (Button)findViewById(R.id.enemy_redbuff_creep);
        dragon = (Button)findViewById(R.id.dragon);
        baron = (Button)findViewById(R.id.baron);

        wraith.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                wraithTimer.start();
            }
        });

    }

    public enum buttons{wraith,wolf};
    public class MyCounter extends CountDownTimer{



        public MyCounter(long millisInFuture, long countDownInterval, Button nam) {
            super(millisInFuture, countDownInterval);
        }


        public void onFinish() {
            wraith.setText("DONE");

        }
        public void onTick(long millisUntilFinished, buttons names) {

            switch(names){

            case wraith: 
                wraith.setText((millisUntilFinished/1000)+"");
                break;
            case wolf: 
                 wolf.setText((millisUntilFinished/1000)+"");
                 break;         
            }

        }


        public void onTick(long millisUntilFinished) {
            // TODO Auto-generated method stub

        }

    }

}

1 个答案:

答案 0 :(得分:1)

一种选择是在MyCounter类中使用Enums。

只需在构造函数中指定它,然后在onTick()方法中,使用带枚举作为参数的开关。


编辑:

在构造函数中使用枚举意味着在初始化器中使用此代码:

final MyCounter <name>Timer = new MyCounter(x0000, 100, buttons.wraith);

在你的MyCounter类中添加一个私有字段,你可以在其中存储枚举:

private buttons button;

并在构造函数中指定枚举:

public MyCounter(long millisInFutre, long countdownInterval, buttons name) {
    super(millisInFutre, countdownInterval);
    this.button = name;
}

然后应该像往常一样调用onTick方法:

public void onTick(long millisUntilFinished) {
    switch(button) {
    case buttons.wraith:
        wraith.setText(...);
        break;
    }
}

希望你能完成这个:)