Захват двойного касания фрагмента карты

Я пытаюсь зафиксировать событие двойного нажатия с помощью детектора жестов.

У меня есть оверлейный фрейм, который помещается поверх моего фрагмента карты и реализует слушатели онтач и жестов. Проблема в том, что я могу получить только один слой для захвата событий. Если я изменю onDown на возврат true, оверлей использует все события, и карту нельзя будет использовать. Если он возвращает false, карта вместо этого также использует событие двойного нажатия и увеличивает масштаб, когда я не хочу этого делать.

Вот соответствующий код для наложения:

@Override
public boolean onDown(MotionEvent e) {
    return false;
}

@Override
public void onShowPress(MotionEvent e) {
}

@Override
public boolean onSingleTapUp(MotionEvent e) {
    return false;
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    return false;
}

@Override
public void onLongPress(MotionEvent e) {
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    return false;
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    return mDetector.onTouchEvent(event);
}

@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
    return false;
}

@Override
public boolean onDoubleTap(MotionEvent e) {
    if(mEventListener != null){
        mEventListener.onSelect();
    }
    return true;
}

@Override
public boolean onDoubleTapEvent(MotionEvent e) {
    return false;
}


public interface OnSelectListener{
    void onSelect();
}

public void setEventListener(OnSelectListener mEventListener){
    this.mEventListener = mEventListener;
}

И вот как устроен мой макет:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.google.android.gms.maps.MapFragment"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layout="@layout/circle_options">
</fragment>

<com.derongan.ambiance.OverlayFrame
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/frame_layout">

person Derongan    schedule 02.11.2015    source источник
comment
что вы подразумеваете под Проблема в том, что карта может реагировать только на события касания или наложение.?   -  person Blackbelt    schedule 03.11.2015
comment
Извините, это неясно. Позвольте мне исправить это очень быстро   -  person Derongan    schedule 03.11.2015
comment
onTouch реализован таким образом?   -  person Blackbelt    schedule 03.11.2015
comment
Каким-то образом возврат был вырезан из кода. Он должен возвращать результат mDetector.onTouchEvent.   -  person Derongan    schedule 03.11.2015
comment
попробуй так if (mDetector.onTouchEvent(event)) { return true; } return super.onTouchEvent(event);   -  person Blackbelt    schedule 03.11.2015
comment
Когда я это делаю, работает только карта. Я не могу получить события двойного нажатия в своем оверлее.   -  person Derongan    schedule 03.11.2015
comment
заставить onDoubleTapEvent вернуть истину   -  person Blackbelt    schedule 03.11.2015
comment
Кажется, это все еще не работает   -  person Derongan    schedule 04.11.2015


Ответы (1)


Проблема решилась двумя вещами:

Во-первых, мне нужно было переопределить onInterceptTouchEvent, а также onTouchEvent. Таким образом, мой детектор жестов получал как начальные (незахваченные) события, так и более поздние захваченные.

Кроме того, из-за того, как события распространяются в Android, недостаточно, чтобы фрагмент карты содержался во фрагменте под фреймом. Вместо этого фрейм нужно было сделать родителем фрагмента, чтобы события перехвата и касания работали правильно.

person Derongan    schedule 10.11.2015