То, что мне нужно достичь здесь, заключается в следующем
1) наложить прозрачную «точку» на изображение PNG; где пользователь нажал.
2) наложить прозрачный «Большой круг», когда пользователь долго держит прикосновение.
3) после Doble нажмите «Очистить экран»
В первую очередь я использую "onTouchEvent" для обнаружения событий щелчка ... и "geastureDetector" для обнаружения двойного касания ... но не получаю желаемый результат.
Это две реализации, которые я пробую
Этот первый подход работает нормально ... Но генерируемое событие щелчка имеет некоторое отклонение ... Я хочу сказать, что захваченное событие щелчка всегда смещено примерно на 50 пикселей в направлении Y ... Я не могу выяснить, почему это должно произойти ..
class Tileview extends Activity implements GestureDetector.OnGestureListener,GestureDetector.OnDoubleTapListener {
onCreate(){
//add the View Thing here.
}
@Override
public void onLongPress(MotionEvent e) {
// "longPress Detected"
}
@Override
public boolean onDoubleTap(MotionEvent e) {
// "longPress Detected"
}
@Override
public boolean onTouchEvent(MotionEvent event) {
final int action = event.getActionMasked();
switch(action){
case MotionEvent.ACTION_DOWN:
mClickX = event.getX();
mClickY = event.getY();
}
myTileView.invalidate();
return mGestureDetector.onTouchEvent(event);
}
private class MyTileView extends View{
protected void onDraw(Canvas canvas){
// Canvas & Paint stuff - for translucent cicle
c.drawCircle(mClickX, mClickY, 75.0f, p);
}
}
Другой подход позволяет накладывать изображение в нужном месте; но когда я добавляю реализацию DoubleTap в "View" вместо Activity ... doubleTap / geastureListeners никогда не сработает ....
Единственное изменение, которое я сделал в этом случае, заключалось в получении onTouchEvent () - и соответствующей реализации в классе «view» ....
class TileActivity extends Activity {
OnCreate()
{
// Bla Bla Bla
}
private class TileView extends View implements OnDoubleTapListener, OnGestureListener{
@override
onTouchEvent(){
// get co-ordinates here from MotionEvent
}
@Override
public boolean onDoubleTap(MotionEvent e) {
// THIS WON'T EVEN GET FIRED
// In this case the doubleTap detection is not working
clearEntireScreen = true;
return false;
}
}
}