如何在GoogleMap上偵聽所有的觸發事件

Android給的GoogleMap類別中,只能在地圖上偵聽點擊(Click)與長按(LongClick)事件,但很多時候,我們會需要偵聽其他的事件,比如拖曳或手勢,這時候就無法就官方給的架構去時做出來了 所以我們就要客製化幾個類別,讓我們能夠偵聽到所有的觸發事件

1.客製化MapFragment的Layout容器,通常會是FrameLayout,在此建立偵聽功能

	public class HandleTouchEvent_FrameLayout extends FrameLayout {

		public HandleTouchEvent_FrameLayout(Context context) {
			super(context);
		}

		@Override
		public boolean dispatchTouchEvent(MotionEvent ev) {
			//任何碰到螢幕而你想偵聽的觸發事件都可以在此實作
			return super.dispatchTouchEvent(ev);
		}

2.客製化MapFragment,在此抽換掉原本Fragment裡面不具有偵聽任何Touch事件的Layout

public class HandleTouchEvent_MapFragment extends SupportMapFragment {
	
	private View mOriginalView;
	private HandleTouchEvent_FrameLayout mTouchRventHandler;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		
		mOriginalView = super.onCreateView(inflater, container, savedInstanceState);
		mTouchRventHandler = new HandleTouchEvent_FrameLayout(getActivity());
		mTouchRventHandler.addView(mOriginalView);
		
		
		return mTouchRventHandler;
	}

	@Override
	public View getView() {
		// TODO 自動產生的方法 Stub
		return mOriginalView;
	}
	}

3.記得相對應的xml檔也要換掉類別名稱

        <fragment
            android:id="@+id/google_map"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            class="com.zoaks.tourpins.fragments.HandleTouchEvent_MapFragment" />

4.最後修正Activity上對Fragment的調用


GoogleMap mGoogleMap = ((HandleTouchEvent_MapFragment)
getSupportFragmentManager().findFragmentById(R.id.google_map)).getMap();

這樣就肥尼遜了…XDD

廣告