Merge remote-tracking branch 'origin/dev_custom_map' into dev_custom_map

This commit is contained in:
jiaguofeng
2020-06-18 14:28:46 +08:00
6 changed files with 139 additions and 104 deletions

View File

@@ -27,35 +27,35 @@ PASSWORD=xintai2018
RELEASE=false
# 模块版本
## 工程内模块
MOGO_COMMONS_VERSION=1.2.1
MOGO_UTILS_VERSION=1.2.1
MAP_AMAP_VERSION=1.2.1
MAP_CUSTOM_VERSION=1.2.1
MAP_AUTONAVI_VERSION=1.2.1
MOGO_MAP_VERSION=1.2.1
MOGO_MAP_API_VERSION=1.2.1
MOGO_SERVICE_VERSION=1.2.1
MOGO_SERVICE_API_VERSION=1.2.1
MOGO_CONNECTION_VERSION=1.2.1
MOGO_MODULE_APPS_VERSION=1.2.1
MOGO_MODULE_NAVI_VERSION=1.2.1
MOGO_MODULE_SHARE_VERSION=1.2.1
MOGO_MODULE_COMMON_VERSION=1.2.1
MOGO_MODULE_MAIN_VERSION=1.2.1
MOGO_MODULE_MAP_VERSION=1.2.1
MOGO_MODULE_SERVICE_VERSION=1.2.1
MOGO_MODULE_EXTENSIONS_VERSION=1.2.1
MOGO_MODULE_SEARCH_VERSION=1.2.1
MOGO_MODULE_BACK_VERSION=1.2.1
MOGO_MODULE_GPS_SIMULATOR_VERSION=1.2.1
MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.2.1
MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.2.1
MOGO_MODULE_AUTHORIZE_VERSION=1.2.1
MOGO_MODULE_GUIDE_VERSION=1.2.1
MOGO_MODULE_MEDIA_VERSION=1.2.1
MOGO_COMMONS_VERSION=1.2.1.3
MOGO_UTILS_VERSION=1.2.1.3
MAP_AMAP_VERSION=1.2.1.3
MAP_CUSTOM_VERSION=1.2.1.3
MAP_AUTONAVI_VERSION=1.2.1.3
MOGO_MAP_VERSION=1.2.1.3
MOGO_MAP_API_VERSION=1.2.1.3
MOGO_SERVICE_VERSION=1.2.1.3
MOGO_SERVICE_API_VERSION=1.2.1.3
MOGO_CONNECTION_VERSION=1.2.1.3
MOGO_MODULE_APPS_VERSION=1.2.1.3
MOGO_MODULE_NAVI_VERSION=1.2.1.3
MOGO_MODULE_SHARE_VERSION=1.2.1.3
MOGO_MODULE_COMMON_VERSION=1.2.1.3
MOGO_MODULE_MAIN_VERSION=1.2.1.3
MOGO_MODULE_MAP_VERSION=1.2.1.3
MOGO_MODULE_SERVICE_VERSION=1.2.1.3
MOGO_MODULE_EXTENSIONS_VERSION=1.2.1.3
MOGO_MODULE_SEARCH_VERSION=1.2.1.3
MOGO_MODULE_BACK_VERSION=1.2.1.3
MOGO_MODULE_GPS_SIMULATOR_VERSION=1.2.1.3
MOGO_MODULE_GPS_SIMULATOR_DEBUG_VERSION=1.2.1.3
MOGO_MODULE_GPS_SIMULATOR_NOOP_VERSION=1.2.1.3
MOGO_MODULE_AUTHORIZE_VERSION=1.2.1.3
MOGO_MODULE_GUIDE_VERSION=1.2.1.3
MOGO_MODULE_MEDIA_VERSION=1.2.1.3
MOGO_MODULE_MAIN_LAUNCHER_VERSION = 1.0.0.2
MOGO_MODULE_MAIN_INDEPENDENT_VERSION = 1.0.0.2
MOGO_MODULE_MAIN_LAUNCHER_VERSION = 1.0.0.5
MOGO_MODULE_MAIN_INDEPENDENT_VERSION = 1.0.0.5
## 工程外部模块
@@ -72,7 +72,7 @@ MOGO_MODULE_GUIDESHOW_PROVIDER_VERSION=1.0.2-SNAPSHOT
# 在线车辆F
MOGO_MODULE_ONLINECAR_VERSION=1.0.3.2
# v2x
MOGO_MODULE_V2X_VERSION=1.1.14
MOGO_MODULE_V2X_VERSION=1.1.132-SNAPSHOT
# 推送
MOGO_MODULE_PUSH_VERSION=1.0.1
# 广告资源位

View File

@@ -49,7 +49,6 @@ import com.mogo.service.module.IMogoRegisterCenter;
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.service.statusmanager.StatusDescriptor;
import com.mogo.utils.AppUtils;
import com.mogo.utils.LaunchUtils;
import com.mogo.utils.ResourcesHelper;
import com.mogo.utils.UiThreadHandler;
@@ -184,6 +183,8 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
private List< View > demoCache = new ArrayList<>();
private int[] heights = new int[]{100,200,300};
@Override
protected void initViews() {
mApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation( getContext() );
@@ -200,9 +201,12 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
// // todo 测试动画
// View v = LayoutInflater.from(getContext()).inflate(R.layout.demo_top, null);
// TextView tv = v.findViewById(R.id.tvIndex);
// tv.setText(demoCache.size() + ": " + v);
// Random random = new Random();
// int height = heights[random.nextInt(3)];
// tv.setText(demoCache.size()+" height: "+height + ": " + v);
// demoCache.add(v);
// mApis.getTopViewManager().addView(v, new IMogoTopViewStatusListener() {
// LayoutParams params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, height);
// mApis.getTopViewManager().addView(v, params,new IMogoTopViewStatusListener() {
// @Override
// public void onViewAdded(View view) {
// Logger.d(TAG, "onViewAdded: " + view);
@@ -212,6 +216,16 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
// public void onViewRemoved(View view) {
// Logger.d(TAG, "onViewRemoved: " + view);
// }
//
// @Override
// public void beforeViewAddAnim(View view) {
// Logger.d(TAG, "beforeViewAddAnim: " + view);
// }
//
// @Override
// public void beforeViewRemoveAnim(View view) {
// Logger.d(TAG, "beforeViewRemoveAnim: " + view);
// }
// });
// 原始逻辑
showShareDialog();

View File

@@ -82,6 +82,12 @@ public class TopView extends FrameLayout {
});
}
@Override
public void onViewRemoved(View child) {
super.onViewRemoved(child);
Logger.d("TopView", "onViewRemoved: " + child);
}
public interface OnChildAddedListener {
/**
* 子view添加完成但是并不确定已经绘制完成

View File

@@ -8,6 +8,7 @@ import android.transition.TransitionManager;
import android.util.ArrayMap;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.BounceInterpolator;
import android.view.animation.OvershootInterpolator;
import android.widget.ImageView;
@@ -152,7 +153,7 @@ public class TopViewAnimHelper {
hideNaviView();
}
private boolean isTopViewOut = true;
private volatile boolean isTopViewOut = true;
private List<View> viewCaches = new ArrayList<>();
private Map<View, IMogoTopViewStatusListener> statusListenerMap = new ArrayMap<>();
@@ -174,16 +175,45 @@ public class TopViewAnimHelper {
}
if (!viewCaches.contains(view)) {
// 判断此view是否已经增加到了顶部view如果增加过就不增加了
view.setTranslationY(0);
statusListenerMap.put(view, statusListener);
Logger.d(TAG, "开始执行");
isTopViewOut = false;
if (topContainer.getChildCount() > 0) {
// 顶部view已经有了内容新增内容无需整体布局变化只是新增布局加个动画
viewCaches.add(view);
// 生硬的删掉上一个view
View lastView = topContainer.getChildAt(0);
if (statusListenerMap.get(lastView) != null) {
statusListenerMap.get(lastView).beforeViewRemoveAnim(lastView);
}
topContainer.removeView(lastView);
viewCaches.remove(lastView);
if (statusListenerMap.get(lastView) != null) {
statusListenerMap.remove(lastView).onViewRemoved(lastView);
}
// 如果高度变化,生硬的变化一下高度
Logger.d(TAG,"container.height: "+topContainer.getHeight());
if (topContainer.getHeight() != params.height) {
constraintSet.clone(topMotionLayout);
LayoutParams p = topContainer.getLayoutParams();
p.height = params.height;
topContainer.setLayoutParams(p);
constraintSet.connect(naviBg.getId(), ConstraintSet.TOP,
R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP,
computeNaviMarginTop(params.height));
constraintSet.applyTo(topMotionLayout);
Logger.d(TAG,"改变container的高度===");
}
view.setTranslationY(-(params.height));
topContainer.addView(view, params);
Logger.d(TAG, "顶部view已经有布局了增加新增view滑入动画: " + view.getTranslationY() + " height:" +
" " + view.getHeight() + " paramsHeight: " + params.height);
if (statusListenerMap.get(view) != null) {
statusListenerMap.get(view).beforeViewAddAnim(view);
}
view.animate().translationY(0).setDuration(500).setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
@@ -217,8 +247,13 @@ public class TopViewAnimHelper {
// tvNextRoad.setTextSize(getDimen(R.dimen.dp_34));
// }
topContainer.addView(view, params);
Logger.d(TAG, "整体进入==== view.visibility: " + view.getVisibility() + " view" +
".position: (" + view.getX() + ", " + view.getY() + ") params.width: " + params.width + " params.height: " + params.height);
if (statusListenerMap.get(view) != null) {
statusListenerMap.get(view).beforeViewAddAnim(view);
}
topContainer.setChildAddedListener(child -> {
topContainer.setChildAddedListener(null);
if (naviBg.getVisibility() == View.VISIBLE) {
remainDistanceGroup.setVisibility(View.GONE);
remainTimeGroup.setVisibility(View.GONE);
@@ -253,7 +288,7 @@ public class TopViewAnimHelper {
constraintSet.connect(naviBg.getId(), ConstraintSet.TOP,
R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP,
(int) getDimen(R.dimen.dp_316));
computeNaviMarginTop(params.height));
}
constraintSet.applyTo(topMotionLayout);
ivTurnIcon.getLayoutParams().height =
@@ -300,6 +335,9 @@ public class TopViewAnimHelper {
// 顶部view包含多个view只推出当前view不进行整体上移
Logger.d(TAG,
"小view退出: " + view.getTranslationY() + " height: " + view.getHeight());
if (statusListenerMap.get(view) != null) {
statusListenerMap.get(view).beforeViewRemoveAnim(view);
}
view.animate().translationY(-(view.getHeight())).setDuration(500).setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
@@ -333,6 +371,9 @@ public class TopViewAnimHelper {
} else {
// 顶部view仅剩一个view需要整体上移
currentAnimatingView = view;
if (statusListenerMap.get(view) != null) {
statusListenerMap.get(view).beforeViewRemoveAnim(view);
}
isTopViewOut = true;
// if (naviBg.getVisibility() == View.VISIBLE) {
// tvNextRoad.setTextSize(getDimen(R.dimen
@@ -441,7 +482,7 @@ public class TopViewAnimHelper {
(int) topMotionLayout.getContext().getResources().getDimension(R.dimen.dp_46));
constraintSet.connect(naviBg.getId(), ConstraintSet.TOP,
R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP,
(int) getDimen(R.dimen.dp_316));
computeNaviMarginTop(topContainer.getHeight()));
// ivTurnIcon.getLayoutParams().height =
// (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_height);
// ivTurnIcon.getLayoutParams().width =
@@ -510,6 +551,12 @@ public class TopViewAnimHelper {
return (int) topMotionLayout.getContext().getResources().getDimension(resId);
}
private int computeNaviMarginTop(int height) {
int result = (int) (height - (getDimen(R.dimen.dp_350) - getDimen(R.dimen.dp_316)));
Logger.d(TAG, "computeNaviMarginTop: " + height + " result: " + result);
return result;
}
interface OnTopViewAnimSimpleListener {
void onAnimStart();

View File

@@ -322,7 +322,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
carPoints.add( new MogoLatLng( markerLocation.getLat(), markerLocation.getLon() ) );
}
String sn = getCarSnFromEntity( markerOnlineCar );
String sn = getPrimaryKeyFromEntity( markerOnlineCar );
IMogoMarker mogoMarker = existCarMap.get( sn );
if ( mogoMarker == null ) {
mogoMarker = drawMapMarker( markerShowEntity, ServiceConst.MARKER_Z_INDEX_LOW );
@@ -361,7 +361,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
markerShowEntity.setMarkerType( markerExploreWay.getType() );
markerShowEntity.setTextContent( markerExploreWay.getAddr() );
String sn = getCarSnFromEntity( markerExploreWay );
String sn = getPrimaryKeyFromEntity( markerExploreWay );
IMogoMarker mogoMarker = existCarMap.get( sn );
if ( mogoMarker == null ) {
Logger.d( TAG, "draw road condition, sn = %s", sn );
@@ -371,70 +371,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
}
}
/**
* 共享音乐
*
* @param shareMusicList
*/
private void drawShareMusicMarker( List< MarkerShareMusic > shareMusicList, int maxAmount ) {
if ( shareMusicList == null || shareMusicList.isEmpty() ) {
MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_SHARE_MUSIC );
return;
}
int size = getAppropriateSize( maxAmount, shareMusicList );
Map< String, IMogoMarker > existCarMap = purgeMarkerData( shareMusicList, ModuleNames.CARD_TYPE_SHARE_MUSIC );
for ( int i = 0; i < size; i++ ) {
MarkerShareMusic markerShareMusic = shareMusicList.get( i );
MarkerLocation markerLocation = markerShareMusic.getLocation();
MarkerShowEntity markerShowEntity = new MarkerShowEntity();
markerShowEntity.setBindObj( markerShareMusic );
markerShowEntity.setMarkerLocation( markerLocation );
markerShowEntity.setMarkerType( markerShareMusic.getType() );
markerShowEntity.setTextContent( markerShareMusic.getMediaName() );
markerShowEntity.setIconUrl( markerShareMusic.getMediaImg() );
String sn = getCarSnFromEntity( markerShareMusic );
IMogoMarker mogoMarker = existCarMap.get( sn );
if ( mogoMarker == null ) {
drawMapMarker( markerShowEntity, ServiceConst.MARKER_Z_INDEX_HIGH );
}
}
}
/**
* 新鲜事
*
* @param noveltyInfoList
*/
private void drawNoveltyMarker( List< MarkerNoveltyInfo > noveltyInfoList, int maxAmount ) {
if ( noveltyInfoList == null || noveltyInfoList.isEmpty() ) {
MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_NOVELTY );
return;
}
int size = getAppropriateSize( maxAmount, noveltyInfoList );
Map< String, IMogoMarker > existCarMap = purgeMarkerData( noveltyInfoList, ModuleNames.CARD_TYPE_NOVELTY );
for ( int i = 0; i < size; i++ ) {
MarkerNoveltyInfo noveltyInfo = noveltyInfoList.get( i );
MarkerLocation markerLocation = noveltyInfo.getLocation();
MarkerShowEntity markerShowEntity = new MarkerShowEntity();
markerShowEntity.setBindObj( noveltyInfo );
markerShowEntity.setMarkerLocation( markerLocation );
markerShowEntity.setMarkerType( noveltyInfo.getType() );
String address = noveltyInfo.getLocation().getAddress();
if ( !TextUtils.isEmpty( address ) ) {
markerShowEntity.setTextContent( address );
} else {
markerShowEntity.setTextContent( noveltyInfo.getContentData().getTitle() );
}
String sn = getCarSnFromEntity( noveltyInfo );
IMogoMarker mogoMarker = existCarMap.get( sn );
if ( mogoMarker == null ) {
drawMapMarker( markerShowEntity, ServiceConst.MARKER_Z_INDEX_HIGH );
}
}
}
/**
* S = (A ∩ B) B
* A ∩ B)作为旧列表需要保留的部分
@@ -456,11 +392,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
Map< String, IMogoMarker > allMap = new HashMap<>();
for ( IMogoMarker marker : allCarsList ) {
String sn = getCarSnFromMarker( marker );
String sn = getPrimaryKeyFromMarker( marker );
allMap.put( sn, marker );
}
for ( Object entity : newList ) {
String sn = getCarSnFromEntity( entity );
String sn = getPrimaryKeyFromEntity( entity );
if ( allMap.containsKey( sn ) ) {
existMap.put( sn, allMap.get( sn ) );
}
@@ -477,6 +413,26 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
return existMap;
}
private String getPrimaryKeyFromEntity( Object entity ) {
if ( entity instanceof MarkerExploreWay ) {
String id = ( ( MarkerExploreWay ) entity ).getInfoId();
if ( !TextUtils.isEmpty( id ) ) {
return id;
}
}
return getCarSnFromEntity( entity );
}
private String getPrimaryKeyFromMarker( IMogoMarker marker ) {
if ( marker == null || marker.getObject() == null || marker.isDestroyed() ) {
return null;
}
if ( !( marker.getObject() instanceof MarkerShowEntity ) ) {
return null;
}
return getPrimaryKeyFromEntity( ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() );
}
private String getCarSnFromEntity( Object entity ) {
try {
if ( entity instanceof MarkerOnlineCar ) {

View File

@@ -19,4 +19,16 @@ public interface IMogoTopViewStatusListener {
* @param view 移除的view
*/
void onViewRemoved(View view);
/**
* view添加动画开始之前
* @param view 添加的view
*/
void beforeViewAddAnim(View view);
/**
* view 移除动画开始之前
* @param view 移除的view
*/
void beforeViewRemoveAnim(View view);
}