Как реализовать doubletap в onview для imageview?

У меня есть изображение. Мне нужно запустить анимацию с разной скоростью на двойном касании и синглет. При удвоенной скорости скорость быстро и на синей скорости возвращается к нормальной скорости.

Как я могу реализовать жесты onclick для изображения?

Если вы не хотите идти на просмотр пользовательского изображения, вы можете использовать следующий подход

// class level GestureDetector gestureDetector; boolean tapped; ImageView imageView; // inside onCreate of Activity or Fragment gestureDetector = new GestureDetector(getActivity(),new GestureListener()); 

// ———————————————— ——————————–

 public class GestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onDown(MotionEvent e) { return true; } // event when double tap occurs @Override public boolean onDoubleTap(MotionEvent e) { tapped = !tapped; if (tapped) { } else { } return true; } } 

// ———————————————— ——————————–

Для ImageView

 imageView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub return gestureDetector.onTouchEvent(event); } }); 

Вы можете реализовать прослушиватель жестов для улавливания двойного крана, например:

 public class MyView extends ImageView { GestureDetector gestureDetector; public MyView(Context context, AttributeSet attrs) { super(context, attrs); // creating new gesture detector gestureDetector = new GestureDetector(context, new GestureListener()); } // skipping measure calculation and drawing // delegate the event to the gesture detector @Override public boolean onTouchEvent(MotionEvent e) { return gestureDetector.onTouchEvent(e); } private class GestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onDown(MotionEvent e) { return true; } // event when double tap occurs @Override public boolean onDoubleTap(MotionEvent e) { float x = e.getX(); float y = e.getY(); Log.d("Double Tap", "Tapped at: (" + x + "," + y + ")"); return true; } } } 

Не нужно использовать gesturelistener, создать свой собственный образ, а затем переопределить ontouchEvent следующим образом:

 long t1 = 0, t2 = 0; int count = 0; @Override public boolean onTouchEvent(MotionEvent e) { int action = e.getAction(); switch (action){ case MotionEvent.ACTION_DOWN: if(count == 0) { t1 = System.currentTimeMillis(); } if(count == 1){ t2 = System.currentTimeMillis(); } count++; if(count > 1) count = 0; Log.d("DoubleTapImageView", "down t1: " + String.valueOf(t1) + " t2: " + String.valueOf(t2) + "," + String.valueOf(t2-t1)); if(Math.abs(t2 - t1) < 300){ t1 = t2 = 0; count = 0; // On double tap here. Do stuff } break; } return super.onTouchEvent(e); } 

Таким образом, вы можете контролировать время продолжительности

Вам необходимо расширить GestureDetector.SimpleOnGestureListener на вашу деятельность. Затем вы получите событие DoubleTap. Более подробную информацию вы можете найти здесь:

DoubleTap в андроиде

Android: Как обнаружить двойной кран?