Minuterie agir seulement si je touche l'écran (OnTouchListener)
-
27-09-2019 - |
Question
La minuterie fonctionne très bien. Le problème est que la méthode _dw.newgame () juste faire exécuter (si deux secondes sont plus) si je touche l'écran. Peut-être qu'il a qqch à voir avec le « OnTouchListener »?
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(); }
}
La solution
Peut-être que vous devriez commencer la minuterie dans la méthode onCreate
:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(Bundle savedInstanceState);
timer = new Timer();
timer.schedule(new Task(this), 0, 2000);
}
deuxième essai avec gestionnaire:
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();
}
};
}
Je ne compile pas cela, mais il devrait fonctionner comme ça.
J'ai remarqué une autre chose: je suppose NewGame () ne doit être appelée une fois.
timer.schedule(new Task(this), 0, 2000);fait ça tous les 2 secondes.