1.MapView相關(guān)
1.多個(gè)fragment加載百度地圖需要用textureMapview,能夠避免popupwindow倒是mapview丟失焦點(diǎn)后mapview黑屏且無法恢復(fù)的問題。
2.在聯(lián)合ButterKnife使用的時(shí)候,mapview的onDestory()需要在unbinder.unbind()之后調(diào)用。
@Override
public void onDestroyView() {
mDeviceTrackMapView.onDestroy();
? ? unbinder.unbind();
? ? super.onDestroyView();
}
3.在(fragment中)打開過一次mapview,再次進(jìn)入的時(shí)候重新加載的的時(shí)候出現(xiàn)mapview加載地圖但是不加載地理位置圖標(biāo)等,需要重寫fragment(activty)的生命周期回調(diào)(onSaveInstanceState(),和onViewStateRestored()),同步mapview的生命周期:
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
? ? super.onSaveInstanceState(outState);
? ? mMapView.onSaveInstanceState(outState);
}
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
? ? super.onViewStateRestored(savedInstanceState);
? ? mMapView.onSaveInstanceState(savedInstanceState);
}
4.Mapview和viewPager滑動(dòng)沖突:
? ? ? ?mapview和viewPager在橫向滑動(dòng)的時(shí)候,作為子view的mapview沒有攔截事件,viewpapager攔截并消費(fèi)了。而問題在于mapView無法繼承(final類)也就無法重寫其onTouch事件。這時(shí)候就需要使用:requestDisallowInterceptTouchEvent()。
?????當(dāng)手指觸摸到屏幕時(shí),系統(tǒng)就會(huì)調(diào)用相應(yīng)View的onTouchEvent,并傳入一系列的action。當(dāng)有多個(gè)層級(jí)的View時(shí),在父層級(jí)允許的情況下,這個(gè)action會(huì)一直向下傳遞直到遇到最深層的View。所以touch事件最先調(diào)用的是最底層View的onTouchEvent(onTouchEvent自下而上傳遞),而mapview由百度封裝,無法繼承,自然不能重寫OnTouch()去消費(fèi)事件,但是我們可以通過requestDisallowInterceptTouchEvent()通知父布局不攔截此事件(等同于告訴父布局我們消費(fèi)了此事件了),所以解決如下:
mMapView.getChildAt(0).setOnTouchListener(new View.OnTouchListener() {
@Override
? ? public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
v.getParent().requestDisallowInterceptTouchEvent(true);
break;
? ? ? ? ? ? case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
v.getParent().requestDisallowInterceptTouchEvent(false);
break;
? ? ? ? ? ? default:
}
return false;
? ? }
});
對(duì)于requestDisallowInterceptTouchEvent()的理解可以看這里。發(fā)現(xiàn)站內(nèi)這里也有對(duì)該問題更為全面的分析。
5.在列表中嵌入百度地圖導(dǎo)致路徑變成黑線的一些列問題
????問題描述:一個(gè)recyclerview的item中有MapView的情況下在①滾動(dòng)屏幕或者②鎖屏、跳轉(zhuǎn)后返回activity導(dǎo)致百度地圖道路變成黑線問題。
????出現(xiàn)問題的原因:百度地圖的mapView生命周期沒有正常調(diào)用。
個(gè)人解決方法:
? ? 問題①:在自己的adapter(recyclerview)中重寫onViewAttachedToWindow()和onViewDetachedFromWindow()方法,并在內(nèi)部進(jìn)行mapview的生命周期:
@Override
public void onViewAttachedToWindow(ViewHolder holder) {
????holder.fenceItemMapView.onResume();
? ? super.onViewAttachedToWindow(holder);
}
@Override
public void onViewDetachedFromWindow(ViewHolder holder) {
????holder.fenceItemMapView.onPause();
? ? super.onViewDetachedFromWindow(holder);
}
問題②在返回activity出現(xiàn)黑線的解決方法:
將加載數(shù)據(jù)放入onResume()中,每次返回清空數(shù)據(jù),并重新加載數(shù)據(jù)庫中數(shù)據(jù)(由于有修改item功能,也順帶刷新了數(shù)據(jù)。個(gè)人做法,暫時(shí))。
已經(jīng)放棄百度改用高德。