Frage

Der Timer funktioniert gut. Das Problem ist, dass das Verfahren _dw.newgame () nur ausgeführt werden soll (wenn zwei Sekunden über), wenn ich das Display berühren. Vielleicht hat es etw mit dem „OnTouchListener“?

zu tun

public class DrawView extends View implements OnTouchListener{
Timer timer = new Timer();

public DrawView(Context context) { timer.schedule(new Task(this),0, 2000); } public boolean onTouch(View view, MotionEvent event) {} }

class Task extends TimerTask { private DrawView _dw; public Task(DrawView dw){ this._dw = dw;} public void run() { _dw.newgame(); } }

War es hilfreich?

Lösung

Vielleicht sollten Sie den Timer in dem onCreate Verfahren starten:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(Bundle savedInstanceState);
    timer = new Timer();
    timer.schedule(new Task(this), 0, 2000);
}

zweiter Versuch mit Handler:

public class DrawView extends View implements OnTouchListener{
    private Timer timer = new Timer();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(Bundle savedInstanceState);

        timer = new Timer();
        timer.schedule(new TimerTask() {
            public void run() {
                handler.sendEmptyMessage();
            }
        }, 0, 2000);
    }

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            newgame();
        }
    };
}

Ich habe kompilieren dies nicht, aber es sollte so funktionieren.
Ich bemerkte eine andere Sache: Ich nehme an newgame () sollte nur einmal aufgerufen werden.

timer.schedule(new Task(this), 0, 2000);
tut, dass alle 2 Sek.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top