Переключение изображений с задержкой - PullRequest
1 голос
/ 30 марта 2011

В настоящее время я делаю свое первое приложение для Android, и мне нужна помощь. Приложение, которое я делаю, это игра памяти Simon.

Итак, у меня есть два вопроса:

1) Когда пользователь нажимает одну из цветных кнопок, фоновое изображение кнопки переключается на светящуюся версию. Но как я могу получить кнопку, чтобы снова иметь исходное фоновое изображение после небольшой задержки? Я пробовал это с задачей таймера (только для красной кнопки), но приложение вылетает, когда я пытаюсь сделать это таким образом.

2) Это также должно происходить автоматически, когда компьютер проходит цветовую комбинацию. Есть ли способ поместить его в отдельную функцию, которую можно вызывать?

Вот код: пакет android.Simon;

import android.app.Activity; импорт android.os.Bundle; импорт android.os.Handler; импорт android.os.SystemClock; импорт android.view.View; import android.view.View.OnClickListener; импорт android.widget.Button; импорт android.widget.Chronometer; import android.widget.TextView; импорт java.util.Random; import java.util.Timer; import java.util.TimerTask;

открытый класс Саймон расширяет Activity { Хронометр мХронометр; int [] ComArray = new int [100]; int gebruikergetal; int i = 0; int j = 0; int aantalcomgetallen = 1; // переменная для определения количества цветов, которые должен показать компьютер int gebruikerteller; // переменная, чтобы определить, настала ли очередь пользователя int starttop = 1; внутренняя задержка = 1000;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button button;
    final TextView textView = (TextView) findViewById(R.id.textView1);
    final Button button1;
    final Button button2;
    final Button button3;
    final Button button4;

    for(i=0;i<100;i++){
        for(j=0;j<4;j++){
            ComArray[i] = RandomCreator.getRandomInt(1, 4);
        }
    }

    i=0;

    mChronometer = (Chronometer) findViewById(R.id.chronometer1);

    button = (Button) findViewById(R.id.button5);       
    button1 = (Button) findViewById(R.id.button1);
    button2 = (Button) findViewById(R.id.button2);
    button3 = (Button) findViewById(R.id.button3);
    button4 = (Button) findViewById(R.id.button4);

    final View.OnClickListener Blauw = new OnClickListener() {
        public void onClick(View v){
            //int GebruikerArray[] = new int[i];
            gebruikergetal = 2;
            button1.setBackgroundDrawable(getResources().getDrawable(0x7f020001));
                    //here i'm switching the background image of the button
            textView.setText(String.valueOf(gebruikergetal));
            if(gebruikergetal!=ComArray[i]){
                textView.setText("Game Over");
            }
            i++;
        }
    };

    final View.OnClickListener Groen = new OnClickListener() {
        public void onClick(View v){
            //int GebruikerArray[] = new int[i];
            gebruikergetal = 3;
            button2.setBackgroundDrawable(getResources().getDrawable(0x7f020003));
            textView.setText(String.valueOf(gebruikergetal));
            if(gebruikergetal!=ComArray[i]){
                textView.setText("Game Over");
            }
            i++;
        }
    };

    final View.OnClickListener Rood = new OnClickListener() {
        public void onClick(View v){
            //int GebruikerArray[] = new int[i];
            Timer timer = new Timer();

            gebruikergetal = 1;
            button3.setBackgroundDrawable(getResources().getDrawable(0x7f020006));
            //this is where I try out the timer task, but the app crashes
                    TimerTask task = new TimerTask(){
                public void run(){
                        button3.setBackgroundDrawable(getResources().getDrawable(0x7f020005));
                }
            };
            timer.scheduleAtFixedRate(task, 0, 1000);
            textView.setText(String.valueOf(gebruikergetal));
            if(gebruikergetal!=ComArray[i]){
                textView.setText("Game Over");
            }
            i++;
        }
    };

    final View.OnClickListener Geel = new OnClickListener() {
        public void onClick(View v){
            //int GebruikerArray[] = new int[i];
            gebruikergetal = 4;
            button4.setBackgroundDrawable(getResources().getDrawable(0x7f020009));
            textView.setText(String.valueOf(gebruikergetal));
            if(gebruikergetal!=ComArray[i]){
                textView.setText("Game Over");
            }
            i++;
        }
    };
    View.OnClickListener mStartListener = new OnClickListener() {
        public void onClick(View v) {
            if(startstop == 1){
                mChronometer.start();
                textView.setText("Com Turn!");
                button1.setOnClickListener(Blauw);
                button2.setOnClickListener(Groen);
                button3.setOnClickListener(Rood);
                button4.setOnClickListener(Geel);
                startstop = 0;
            }
            else{
                startstop = 1;
                mChronometer.stop();
                textView.setText("");
            }
        }
    };
    button.setOnClickListener(mStartListener);
}

}

Если бы кто-то мог помочь, я был бы очень благодарен. Thx

1 Ответ

1 голос
/ 30 марта 2011

Добавьте все, что вам нужно сделать, в метод и используйте то, что называется обработчиком и работоспособным.

private Handler mHandler;

mHandler = new Handler(); 
mHandler.postDelayed(switchImages, delay (in milliseconds); 

 private Runnable switchImages = new Runnable() {
        public void run() {
            //Whatever method you make call here
                mHandler.postDelayed(switchImages, delay); 
                //This will call it again therefore continuous updating;
        }
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...