個(gè)人在百度地圖開發(fā)遇到的問題總結(jié)

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)放棄百度改用高德。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容