W poprzedniej wersji naszej aplikacji mieliśmy skaczącą piłkę, przydałaby się teraz obsługa ekranu dotykowego. Spróbujemy zatrzymać piłkę palcem.
Jest to dość proste. W klasie
1 | class Obraz2d extends View |
która znajduje się wewnątrz naszego Activity i służyła nam do rysowania w aplikacji Canvas, oraz do animacji w aplikacji z wątkiem teraz musimy dodać jedną metodę:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); int action=event.getActionMasked(), X=Math.round(event.getX()), Y=Math.round(event.getY()); //informacje o zdarzeniu: rodzaj (action) i pozycja (X,Y) switch (action) { case MotionEvent.ACTION_DOWN: if (game!=null) game.pointerPressed(X,Y); invalidate(); break; case MotionEvent.ACTION_UP: if (game!=null) game.pointerReleased(X,Y); invalidate(); break; // tu inne rodzaje akcji default: break; } invalidate(); return true; } |
Metody tej nigdzie nie wywołujemy. Android wywoła ją sam zawsze, kiedy uderzymy palcem w ekran, podając jako parametr obiekt event, który posiada zapisane wszystkie parametry uderzenia (miejsce, siła itp.). W naszym wypadku zmienna pozx przechowuje współrzędną X animowanego obiektu, który zostanie przesunięty (skokiem) do miejsca uderzenia event.getX().
@Override oznacza, że nadpisujemy obiekt ze źródłowej klasy View, którą to nasza klasa Grafika2d rozszerzyła o nowe metody. Podobnie było z metodą onDraw(). A metoda invalidate() odświeży grafikę.