Są dwa sposoby na detekcje dotyku: - Aktywność lub widok lub inna klasa implementuje interfejs OnTouchListener. W klasie tej musi być zdefiniowana metoda onTouch, a listener musi być zarejestrowany metodą setOnTouchListener. - W przypadku widokow (klas potomnych wzgledem klasy View) wystarczy nadpisac metode onTouchEvent. Tak zrobimy my. Kontynuujemy rozwoj projektu Grafika2D -------------------- Dotyk 1. W klasie Grafika2DView definiujemy pola: private PointF kursor = new PointF(szerokosc/2,wysokosc/2); final private float kursorPromien = 15; private boolean czyKursorWidoczny = false; 2. W tej samej klasie nadpisujemy metodę onTouchEvent: @Override public boolean onTouchEvent(MotionEvent event) { int akcja=event.getAction() & MotionEvent.ACTION_MASK; switch(akcja) { case MotionEvent.ACTION_DOWN: czyKursorWidoczny=true; break; case MotionEvent.ACTION_UP: czyKursorWidoczny=false; break; } kursor.x=event.getX(); kursor.y=event.getY(); //invalidate(); //return super.onTouchEvent(event); return true; } 3. Do metody onDraw dodajemy polecenie rysujace okrag w miejscu dotkniecia palcem (przed wywolaniem metody invalidate!!): //slad palca (wskaznik) if(czyKursorWidoczny) { paint.setColor(Color.BLACK); paint.setStrokeWidth(1f); paint.setStyle(Paint.Style.STROKE); canvas.drawCircle(kursor.x, kursor.y, kursorPromien, paint); } ----------------------- Wielodotyk: 4. Dodajemy pole: private ArrayList kursory = new ArrayList(); 5. Modyfikujemy metode onTouchEvent: @Override public boolean onTouchEvent(MotionEvent event) { int akcja=event.getAction() & MotionEvent.ACTION_MASK; switch(akcja) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_POINTER_DOWN: czyKursorWidoczny=true; break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: czyKursorWidoczny=false; break; } kursor.x=event.getX(); kursor.y=event.getY(); //invalidate(); int ileKursorow = event.getPointerCount(); kursory.clear(); for(int i=0; i