Я хочу, чтобы ListView перехватывал все события, кроме SingleTap.
Сначала я сделал код ниже
private float startX;
private float startY;
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN ) {
Log.d("intercept", "down");
startX = event.getX();
startY = event.getY();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
Log.d("intercept", "up");
float deltaX = Math.abs(event.getX() - startX);
float deltaY = Math.abs(event.getY() - startY);
if(deltaX<5 && deltaY<5){
return false;
}
}
return super.onInterceptTouchEvent(event);
}
Благодаря этому я смог увидеть, что я действительно обнаруживаю singleTap (intercept-down
и intercep-up
в LogCat), но он блокирует мой список для обработки других ходов. После этого я меняю return super.onInterceptTouchEvent(event);
на return true
и все остальные ходы работают. Проблема в том, что я больше не мог обнаружить singleTap. Я вижу, что intercept-down
в Logcat, но не intercept-up
. Я уже пробовал этот другой код без успеха.
import android.content.Context;
import android.support.v4.view.GestureDetectorCompat;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ListView;
public class SwipeListView extends ListView {
Context context;
private GestureDetectorCompat mDetector;
public SwipeListView(Context context) {
super(context);
}
public SwipeListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SwipeListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setContext(Context context){
this.context= context;
mDetector = new GestureDetectorCompat(context, new MyGestureListener());
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return !onTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent e) {
return mDetector.onTouchEvent(e);
}
class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
private static final String DEBUG_TAG = "Gestures";
@Override
public boolean onDown(MotionEvent event) {
Log.e(DEBUG_TAG,"onDown: " + event.toString());
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent event) {
Log.e(DEBUG_TAG, "onSingleTap: " + event.toString());
return true;
}
}
}
Кто-нибудь может помочь мне правильно определить singleTap?