[android] - only dispatch events if not handled by MarkerView (#8447)
use onTouch listener to ignore dispatching action up events to MapView when they are already handled by MarkerView.
This commit is contained in:
@@ -17,14 +17,18 @@ public class MarkerViewContainer extends FrameLayout {
|
||||
|
||||
public MarkerViewContainer(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
setTag(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean dispatchTouchEvent(MotionEvent ev) {
|
||||
final boolean childResult = super.dispatchTouchEvent(ev);
|
||||
if (childResult) {
|
||||
super.dispatchTouchEvent(ev);
|
||||
boolean actionUp = (boolean) getTag();
|
||||
if (!actionUp) {
|
||||
((ViewGroup) getParent()).onTouchEvent(ev);
|
||||
} else {
|
||||
setTag(false);
|
||||
}
|
||||
return childResult;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.LongSparseArray;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
@@ -503,18 +504,23 @@ public class MarkerViewManager implements MapView.OnMapChangedListener {
|
||||
}
|
||||
}
|
||||
|
||||
adaptedView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(final View v) {
|
||||
boolean clickHandled = false;
|
||||
if (onMarkerViewClickListener != null) {
|
||||
clickHandled = onMarkerViewClickListener.onMarkerClick(marker, v, adapter);
|
||||
}
|
||||
adaptedView.setOnTouchListener(new View.OnTouchListener() {
|
||||
|
||||
if (!clickHandled) {
|
||||
ensureInfoWindowOffset(marker);
|
||||
select(marker, v, adapter);
|
||||
@Override
|
||||
public boolean onTouch(View v, MotionEvent event) {
|
||||
if (event.getAction() == MotionEvent.ACTION_UP) {
|
||||
boolean clickHandled = false;
|
||||
if (onMarkerViewClickListener != null) {
|
||||
clickHandled = onMarkerViewClickListener.onMarkerClick(marker, v, adapter);
|
||||
markerViewContainer.setTag(true);
|
||||
}
|
||||
|
||||
if (!clickHandled) {
|
||||
ensureInfoWindowOffset(marker);
|
||||
select(marker, v, adapter);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user