Kontynuujemy rozwoj projektu Grafika2D Są dwa sposoby na detekcje dotyku: - Aktywność lub widok lub inna klasa implementuje interfejs Android.Views.View.IOnTouchListener. 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. -------------------- Dotyk 1. W klasie Grafika2DView definiujemy pola i nadpisujemy metodę OnTouchEvent #region Dotyk private PointF kursor = new PointF(0, 0); private const float kursorPromien = 15; private bool czyKursorWidoczny = false; public override bool OnTouchEvent(MotionEvent e) { MotionEventActions akcja = e.Action & MotionEventActions.Mask; switch (akcja) { case MotionEventActions.Down: czyKursorWidoczny = true; break; case MotionEventActions.Up: czyKursorWidoczny = false; break; } kursor.X = e.GetX(); kursor.Y = e.GetY(); //invalidate(); //return base.OnTouchEvent(e); return true; } #endregion 3. Do metody OnDraw dodajemy polecenie rysujace okrag w miejscu dotkniecia palcem (przed wywolaniem metody Invalidate!!): //ślad palca (wskażnik) if (czyKursorWidoczny) { paint.Color = Color.Black; paint.StrokeWidth = 1f; paint.SetStyle(Paint.Style.Stroke); canvas.DrawCircle(kursor.X, kursor.Y, kursorPromien, paint); } ----------------------- Wielodotyk: 4. Dodajemy pole: private List kursory = new List(); 5. Modyfikujemy metode OnTouchEvent: public override bool OnTouchEvent(MotionEvent e) { MotionEventActions akcja = e.Action & MotionEventActions.Mask; switch (akcja) { case MotionEventActions.Down: case MotionEventActions.PointerDown: czyKursorWidoczny = true; break; case MotionEventActions.Up: case MotionEventActions.PointerUp: czyKursorWidoczny = false; break; } kursor.X = e.GetX(); kursor.Y = e.GetY(); int ileKursorów = e.PointerCount; kursory.Clear(); for (int i = 0; i < ileKursorów; ++i) kursory.Add(new PointF(e.GetX(i), e.GetY(i))); //return base.OnTouchEvent(e); return true; } 6. W metodzie OnDraw rysujemy kursory: //multitouch - urzadzenie musi to wspierac! if (czyKursorWidoczny && kursory.Count > 0) { paint.Color = Color.Red; paint.StrokeWidth = 1f; paint.SetStyle(Paint.Style.Stroke); for (int i = 0; i < kursory.Count; ++i) { canvas.DrawCircle(kursory[i].X, kursory[i].Y, 2 * kursorPromien, paint); string numer = i.ToString(); Rect rozmiar = new Rect(); paint.GetTextBounds(numer, 0, numer.Length, rozmiar); canvas.DrawText(numer, kursory[i].X - rozmiar.Width() / 2f, kursory[i].Y + rozmiar.Height() / 2f, paint); } }