Creating OnDragListener for Google Map v2 Fragment

前端 未结 4 957
后悔当初
后悔当初 2020-12-24 14:46

I’m trying to setup an onDrag Listener for a google map fragment, but can’t get the drag event to fire. Since the map doesn\'t support drag events directly, I\'m trying to i

4条回答
  •  温柔的废话
    2020-12-24 15:04

    1) Create wrapper class:

    public class MapWrapperLayout extends FrameLayout {
    
        public interface OnDragListener {
            public void onDrag(MotionEvent motionEvent);
        }
    
        private OnDragListener mOnDragListener;
    
        public MapWrapperLayout(Context context) {
            super(context);
        }
    
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            if (mOnDragListener != null) {
                mOnDragListener.onDrag(ev);
            }
            return super.dispatchTouchEvent(ev);
        }
    
        public void setOnDragListener(OnDragListener mOnDragListener) {
            this.mOnDragListener = mOnDragListener;
        }
    }
    

    2) Create subclass of MapFragment class:

    public class CustomMapFragment extends SupportMapFragment {
    
        private View mOriginalView;
        private MapWrapperLayout mMapWrapperLayout;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            mOriginalView = super.onCreateView(inflater, container, savedInstanceState);
    
            mMapWrapperLayout = new MapWrapperLayout(getActivity());
            mMapWrapperLayout.addView(mOriginalView);
    
            return mMapWrapperLayout;
    }
    
        @Override
        public View getView() {
            return mOriginalView;
        }
    
        public void setOnDragListener(MapWrapperLayout.OnDragListener onDragListener) {
            mMapWrapperLayout.setOnDragListener(onDragListener);
        }
    

    3.1) Finally, in your activity:

        // Google map init block
        CustomMapFragment customMapFragment = ((CustomMapFragment) getSupportFragmentManager().findFragmentById(R.id.map));
        customMapFragment.setOnDragListener(new MapWrapperLayout.OnDragListener() {
            @Override
            public void onDrag(MotionEvent motionEvent) {
                Log.d("ON_DRAG", String.format("ME: %s", motionEvent));
                // Handle motion event:
            }
        });
        GoogleMap map = customMapFragment.getMap();
    

    3.2) ... and in your layout:

    
    

提交回复
热议问题