Klasa Canvas jest to domyslnie dostępna klasa w JavaME. Dzięki niej możemy rysować na ekranie telefonu.. :) Zazwyczaj implementacja użycia klasy najlepiej wygląda poprzez stworzenie własnej klasy dziedziczącej po Canvas. Przeciężamy wtedy metody i korzystamy z klasy nadrzędnej jak z interfejsu. Przed przykładem opiszę co ta klasa potrafi czyli jej ciekawsze metody i stałe…
keyPressed(int keyCode) – event na naciśniecie klawisza
keyReleased(int keyCode) – na zwolnienie klawisza
keyRepeated(int keyCode) – trzymanie klawisza
pointerDragged(int x, int y) – przytrzymanie wskaźnika (np palcem po ekranie telefonu)
pointerPressed(int x, int y) – naciśniecie na ekran telefonu
pointerReleased(int x, int y) – puszczenie ekranu telefonu
repaint() – przerysowywuje ekran.
getHeight() – zwraca wysokość ekranu.
getWidth() – zwraca szerokość ekranu.
Proste, nie? Założmy że chcialibyśmy mieć aplikację, która pozwala rysować palcem po ekranie. Aaa no i jeszcze jest klasa Graphics, które instancja jest do używa w metodzie paint(Graphics g) ale metody tej klasy służą już tylko do rysowania i są dość intuicyjnie nazywane.
Jak powinno działać takie rysowanie po ekranie? Po naciśnięciu na ekran, powinno się odczytać aktualną wartość położenia kursora i w tym miejscu powinno się położyć kropkę. I powielać to za każdym przesunieciem myszki, co da efekt prostego rysowania po ekranie :)
Popatrzmy na kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class CanvasDemo extends Canvas{ int x,y; protected void pointerDragged(int x, int y){ this.x=x; this.y=y; repaint(); } protected void paint(Graphics g) { g.setColor (255,255,255); g.drawLine(x,y,x,y); } } |
Proste, prawda? W metodzie która obłsuguje zdarzenie „przeciągaj po ekranie” która pobiera aktualne wartość wskazywanego obszaru. Repaint wywołuje paint() która rysuje kropkę w zadanym punktcie. Wykorzystam teraz swoj brak talentu do rysowania i zaprezentuje jak to działa :)
(… po kilku minutach..)
To tak w ramach wykorzystania tematu.. :) No i korzystając już ze światecznej atmosfery – wszystkiego co najlepsze, dla każdego z osobna.. :)
Mateusz Mazurek