Java » Java ME

Touch Screen - czyli dotykowy ekran w Javie

  • 1 komentarz
  • 1289 odsłon
  • Oceń ten tekst jako pierwszy
W tym artykule zajmiemy się obsługą dotykowych ekranów w telefonach komórkowych. Obsługa tych zdarzeń jest już zaimplementowana w dokumentacji MIDP 1.0 w klasie Canvas, tak więc tworzona aplikacja musi dziedziczyć z tejże klasy :

class TestowyDotyk extends Canvas 
{
}

Aby cała aplikacja działała, nie należy deklarować zbyt wiele bilbiotek, wystarczy standardowa:

import javax.microedition.lcdui.*; 

Klasa canvas dostarcza także kilka zdarzeń, dzięki którym będziemy mogli obsłużyć wszelkiego rodzaju akcji, wykonywanych palcem czy rysikiem:

protected void pointerPressed(int x, int y)

To zdarzenie będzie miało miejsce w momencie "przyciśnięcia" rysika do ekranu.

protected void pointerReleased(int x, int y)

Zdarzenie to wystąpi w momencie, gdy "odciśniemy" rysik od ekranu.

protected void pointerDragged(int x, int y)

Powyższe zdarzenie jest generowane w momencie, gdy mamy "przyciśnięty" ekran i poruszyliśmy rysikiem po nim, nie "odciskając" go.

Wszystkie powyższe zdarzenia zwracają współrzędne <font size="2">x</font> oraz <font size="2">y</font>, których wartości odpowiadają aktualnemu położeniu rysika na ekranie.
Jeżeli chcemy zrobić aplikację, zarówno dla telefonów obsługujących dotyk oraz jednocześnie tych nieczułych, przyda nam się również znajomość znajomość dwóch funkcji :

public boolean hasPointerEvents()

Funkcja zwraca wartość <font size="2">true</font>, jeżeli urządzenie obsługuje zdarzenia przyciśnięcia oraz odciśnięcia rysika od ekranu, oraz

public boolean hasPointerMotionEvents()

Funkcja ta zwraca wartość <font size="2">true</font>, jeżeli urządzenie obsługuje zdarzenie przesunięcia rysika po ekranie. Przykładowe użycie dwóch ostatnich funkcji może być następujące :

   if (hasPointerEvents() == true) {
      AplikacjaDotykowa = true;
   } else {
      AplikacjaDotykowa = false;
   }


Ostatnią, dosyć ważną kwestią jest to, iż standardowo emulatory Javy nie obsługują ekranów dotykowych. Aby to umożliwić, musimy zmienić pewną wartość. Należy wejść do katalogu, w których mamy zainstalowany emulator telefonu. Ja używam Wireless Toolkit 2.5.2_01 for CLDC, tak więc domyślnie plik konfiguracyjny znajduje się w lokalizacji :

<font size="2">C:\WTK2.5.2_01\wtklib\devices\DefaultColorPhone\DefaultColorPhone.properties</font>

Należy odnaleźć wartość

<font size="2">touch_screen=false;</font>

i zamienić <font size="2">false</font> na <font size="2">true</font>. Aby zmiany odniosły skutek, należy wyłączyć wszystkie włączone emulatory oraz Wireless Toolkit. Po ponownym uruchomieniu, po przejechaniu kursorem myszki nad ekran emulatora powinien pojawić się krzyżyk. To znaczy, że zadziałało.

To cała filozofia. Reszta pozostaje w rękach programisty. Poniżej prezentuje przykładową klasę, która w zasadzie nic nie robi, ale pokazuje działanie zdarzeń:

import javax.microedition.lcdui.*;
 
class TestowyDotyk extends Canvas {
 
  String eventType = "Przycisnij ekran!";
  int x;
  int y;
 
  public void pointerPressed (int x, int y) {
    eventType = "Ekran przycisniety!";
    this.x = x;
    this.y = y;
    repaint ();
  }
 
  public void pointerReleased (int x, int y) {
    eventType = "Ekran odcisniety!";
    this.x = x;
    this.y = y;
    repaint ();
  }
 
  public void pointerDragged (int x, int y) {
    eventType = "Rysik przesuniety!";
    this.x = x;
    this.y = y;
    repaint ();
  }
 
  public void paint (Graphics g) {
    g.setGrayScale (255);
    g.fillRect (0, 0, getWidth (), getHeight ());
    g.setGrayScale (0);
    g.drawString (eventType + " " +x +"/"+y, 0, 0, Graphics.TOP|Graphics.LEFT);
    g.drawLine (x-4, y, x+4, y);
    g.drawLine (x, y-4, x, y+4);
  }
}

1 komentarz

furious programming 2012-09-17 01:01

Nie jestem znawcą Javy, ale ten warunek na pewno można uprościć...