properties = new HashMap<>();
+ properties.put("type", 1);
+ MogoApisHandler.getInstance().getApis().getAnalyticsApi().track("APP_Find_Mogoer", properties);
+ }
+ });
+
+ naviBg.setOnClickListener(new OnPreventFastClickListener() {
+ @Override
+ public void onClickImpl(View v) {
+ try {
+ LaunchUtils.launchByPkg(getContext(), "com.autonavi.amapauto");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ }
+
+ @Override
+ public boolean isVisible() {
+ return getVisibility() == View.VISIBLE;
+ }
+
+
+ @Override
+ public void notifyChanged(MogoNaviInfo naviInfo) {
+ if (naviInfo == null) {
+ return;
+ }
+ fillNextCrossDistance(distance, distanceUnit, naviInfo.getCurStepRetainDistance());
+ fillNextCrossIconType(turnIcon, naviInfo.getIconResId());
+ nextRoad.setText(naviInfo.getNextRoadName());
+
+ remainingDistance.setText(getFormatSurplusDistance(naviInfo.getPathRetainDistance()));
+ remainingDistanceUnit.setText(getFormatSurplusDistanceUnit());
+
+ remainingTime.setText(getFormatSurplusTime(naviInfo.getPathRetainTime()));
+ remainingTimeUnit.setText(getFormatSurplusTimeUnit());
+
+ arriveTime.setText(getArriveTime(naviInfo.getPathRetainTime()));
+ }
+
+ public void exchangeToSmall(boolean smooth) {
+ if (!isVisible()) {
+ return;
+ }
+ if (smooth) {
+ TransitionManager.beginDelayedTransition(this);
+ }
+ remainDistanceGroup.setVisibility(View.GONE);
+ remainTimeGroup.setVisibility(View.GONE);
+ arriveTimeGroup.setVisibility(View.GONE);
+ distance.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_panel_next_info_distance_textSize_small));
+ distanceUnit.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_panel_next_info_distance_unit_textSize_small));
+
+ // 调整约束
+ constraintSet.clone(this);
+ constraintSet.connect(distance.getId(), ConstraintSet.BOTTOM,
+ turnIcon.getId(), ConstraintSet.BOTTOM);
+ constraintSet.connect(turnIcon.getId(), ConstraintSet.LEFT,
+ naviBg.getId(), ConstraintSet.LEFT,
+ getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_panel_turn_icon_small_marginLeft));
+ constraintSet.connect(nextRoad.getId(), ConstraintSet.BOTTOM,
+ distance.getId(), ConstraintSet.BOTTOM,
+ getResources().getDimensionPixelSize(R.dimen.module_map_id_navi_next_info_road_marginBottom_small));
+ constraintSet.connect(nextRoad.getId(), ConstraintSet.LEFT,
+ R.id.module_map_id_navi_next_info_turn_info, ConstraintSet.RIGHT,
+ getResources().getDimensionPixelSize(R.dimen.dp_46));
+ constraintSet.clear(turnIcon.getId(), ConstraintSet.TOP);
+ constraintSet.connect(turnIcon.getId(), ConstraintSet.BOTTOM,
+ naviBg.getId(), ConstraintSet.BOTTOM,
+ getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_turn_icon_margin_bottom));
+
+ // 目的地车友
+ constraintSet.clear(tvDestinationOnlineCar.getId(), ConstraintSet.LEFT);
+ constraintSet.clear(tvDestinationOnlineCar.getId(), ConstraintSet.TOP);
+ constraintSet.connect(tvDestinationOnlineCar.getId(),
+ ConstraintSet.BOTTOM, naviBg.getId(), ConstraintSet.BOTTOM,
+ getResources().getDimensionPixelSize(R.dimen.module_ext_navi_small_margin_bottom));
+ constraintSet.connect(tvDestinationOnlineCar.getId(),
+ ConstraintSet.RIGHT, naviBg.getId(), ConstraintSet.RIGHT,
+ getResources().getDimensionPixelSize(R.dimen.module_ext_navi_small_margin_right));
+
+ constraintSet.applyTo(this);
+
+ turnIcon.getLayoutParams().height =
+ getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_panel_turn_icon_small_height);
+ turnIcon.getLayoutParams().width =
+ getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_panel_turn_icon_small_width);
+ naviBg.getLayoutParams().height =
+ getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_panel_small_height);
+
+ tvDestinationOnlineCar.getLayoutParams().height =
+ getResources().getDimensionPixelSize(R.dimen.module_ext_button_height_small);
+
+ tvDestinationOnlineCar.setBackgroundResource(R.drawable.module_ext_dw_navi_info_panel_small_bkg);
+
+ }
+
+ public void exchangeToBig(boolean smooth) {
+ if (!isVisible()) {
+ return;
+ }
+ if (smooth) {
+ TransitionManager.beginDelayedTransition(this);
+ }
+
+ remainDistanceGroup.setVisibility(View.VISIBLE);
+ remainTimeGroup.setVisibility(View.VISIBLE);
+ arriveTimeGroup.setVisibility(View.VISIBLE);
+ distance.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_panel_next_info_distance_textSize));
+ distanceUnit.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_panel_next_info_distance_unit_textSize));
+
+ // 调整约束
+ constraintSet.clone(this);
+ constraintSet.clear(distance.getId(), ConstraintSet.BOTTOM);
+ constraintSet.connect(turnIcon.getId(), ConstraintSet.LEFT,
+ naviBg.getId(), ConstraintSet.LEFT,
+ getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_panel_turn_icon_marginLeft));
+ constraintSet.connect(nextRoad.getId(), ConstraintSet.BOTTOM, turnIcon.getId(),
+ ConstraintSet.BOTTOM);
+ constraintSet.connect(nextRoad.getId(), ConstraintSet.LEFT,
+ distance.getId(), ConstraintSet.LEFT,
+ 0);
+ constraintSet.connect(turnIcon.getId(), ConstraintSet.TOP, naviBg.getId(),
+ ConstraintSet.TOP, 0);
+ constraintSet.connect(turnIcon.getId(), ConstraintSet.BOTTOM,
+ naviBg.getId(), ConstraintSet.BOTTOM, 0);
+
+ // 目的地车友
+ constraintSet.clear(tvDestinationOnlineCar.getId(), ConstraintSet.RIGHT);
+ constraintSet.clear(tvDestinationOnlineCar.getId(), ConstraintSet.BOTTOM);
+ constraintSet.connect(tvDestinationOnlineCar.getId(), ConstraintSet.LEFT,
+ naviBg.getId(), ConstraintSet.LEFT);
+ constraintSet.connect(tvDestinationOnlineCar.getId(), ConstraintSet.TOP,
+ naviBg.getId(), ConstraintSet.BOTTOM,
+ getResources().getDimensionPixelSize(R.dimen.module_ext_camera_button_marginTop));
+ constraintSet.applyTo(this);
+
+ turnIcon.getLayoutParams().height =
+ getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_panel_turn_icon_height);
+ turnIcon.getLayoutParams().width =
+ getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_panel_turn_icon_width);
+ naviBg.getLayoutParams().height =
+ getResources().getDimensionPixelSize(R.dimen.module_ext_navi_info_panel_height);
+ tvDestinationOnlineCar.getLayoutParams().height =
+ getResources().getDimensionPixelSize(R.dimen.module_ext_button_height);
+ tvDestinationOnlineCar.setBackgroundResource(R.drawable.module_ext_dw_navi_info_panel_bkg);
+
+ }
+}
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView.java
index e7d9199ac4..b807d7f67e 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/BaseNaviInfoView.java
@@ -1,9 +1,13 @@
package com.mogo.module.extensions.navi;
+import android.content.Context;
+import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
+import androidx.constraintlayout.widget.ConstraintLayout;
+
import com.mogo.map.navi.MogoNaviInfo;
import java.text.SimpleDateFormat;
@@ -15,13 +19,20 @@ import java.util.Calendar;
*
* 描述
*/
-public abstract class BaseNaviInfoView {
-
- public BaseNaviInfoView(View view) {
-
+public abstract class BaseNaviInfoView extends ConstraintLayout {
+ public BaseNaviInfoView(Context context) {
+ this(context,null);
}
- public abstract void notifyChanged( MogoNaviInfo naviInfo );
+ public BaseNaviInfoView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public BaseNaviInfoView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public abstract void notifyChanged(MogoNaviInfo naviInfo );
protected void fillNextCrossIconType( ImageView target, int iconId ) {
if ( iconId > 0 ) {
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView.java
index 67110d0ba7..8d7f08e5a4 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/NaviInfoView.java
@@ -1,5 +1,7 @@
package com.mogo.module.extensions.navi;
+import android.content.Context;
+import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
@@ -12,7 +14,10 @@ import com.mogo.module.extensions.R;
* @since 2019-09-29
*
* 导航信息
+ *
+ * @deprecated 已经废弃
*/
+@Deprecated
public class NaviInfoView extends BaseNaviInfoView {
private ImageView turnIcon;
@@ -26,20 +31,32 @@ public class NaviInfoView extends BaseNaviInfoView {
private TextView remainingTimeUnit;
private TextView arriveTime;
- public NaviInfoView(View view) {
- super(view);
- turnIcon = view.findViewById( R.id.module_map_id_navi_next_info_road_turn_icon );
- distance = view.findViewById( R.id.module_map_id_navi_next_info_distance );
- distanceUnit = view.findViewById( R.id.module_map_id_navi_next_info_distance_unit );
- nextRoad = view.findViewById( R.id.module_map_id_navi_next_info_road );
-
- remainingDistance = view.findViewById( R.id.module_map_id_remaining_distance );
- remainingDistanceUnit = view.findViewById( R.id.module_map_id_remaining_distance_unit );
- remainingTime = view.findViewById( R.id.module_map_id_remaining_time );
- remainingTimeUnit = view.findViewById( R.id.module_map_id_remaining_time_unit );
- arriveTime = view.findViewById( R.id.module_map_id_arrive_time );
+ public NaviInfoView(Context context) {
+ this(context,null);
}
+ public NaviInfoView(Context context, AttributeSet attrs) {
+ this(context, attrs,0);
+ }
+
+ public NaviInfoView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+// public NaviInfoView(View view) {
+// super(view);
+// turnIcon = view.findViewById( R.id.module_map_id_navi_next_info_road_turn_icon );
+// distance = view.findViewById( R.id.module_map_id_navi_next_info_distance );
+// distanceUnit = view.findViewById( R.id.module_map_id_navi_next_info_distance_unit );
+// nextRoad = view.findViewById( R.id.module_map_id_navi_next_info_road );
+//
+// remainingDistance = view.findViewById( R.id.module_map_id_remaining_distance );
+// remainingDistanceUnit = view.findViewById( R.id.module_map_id_remaining_distance_unit );
+// remainingTime = view.findViewById( R.id.module_map_id_remaining_time );
+// remainingTimeUnit = view.findViewById( R.id.module_map_id_remaining_time_unit );
+// arriveTime = view.findViewById( R.id.module_map_id_arrive_time );
+// }
+
@Override
public boolean isVisible() {
return turnIcon != null && turnIcon.getVisibility() == View.VISIBLE;
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/VrModeNavInfoView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/VrModeNavInfoView.java
index 428d98494a..f736c8b38d 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/VrModeNavInfoView.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/VrModeNavInfoView.java
@@ -1,25 +1,137 @@
package com.mogo.module.extensions.navi;
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.os.Handler;
+import android.os.Message;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.constraintlayout.widget.Group;
import com.mogo.map.navi.MogoNaviInfo;
+import com.mogo.module.extensions.R;
+import com.mogo.module.extensions.view.VerticalTrafficLightView;
/**
* vr模式下导航信息封装
*
* @author tongchenfei
*/
-public class VrModeNavInfoView extends BaseNaviInfoView {
- public VrModeNavInfoView(View view) {
- super(view);
+public class VrModeNavInfoView extends BaseNaviInfoView implements Handler.Callback {
+
+ private final Group speedGroup, navGroup;
+ private final TextView tvLimitSpeed;
+ private final VerticalTrafficLightView turnAroundLight, turnLeftLight, straightLight, turnRightLight;
+
+ private final ImageView ivTurnIcon;
+ private final TextView tvDistance,tvDistanceUnit, tvNextRoad;
+
+ private final TextView tvCurrentSpeed;
+
+ private final Handler handler = new Handler(this);
+
+ public VrModeNavInfoView(Context context) {
+ this(context,null);
}
- @Override
- public boolean isVisible() {
- return true;
+ public VrModeNavInfoView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public VrModeNavInfoView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ LayoutInflater.from(context).inflate(R.layout.include_navi_in_vr, this);
+ speedGroup = findViewById(R.id.module_ext_id_group_navi_in_vr_speed);
+ navGroup = findViewById(R.id.module_ext_id_group_navi_in_vr_nav_info);
+ tvLimitSpeed = findViewById(R.id.module_ext_id_tv_limit_speed);
+ turnAroundLight = findViewById(R.id.module_ext_id_traffic_light_turn_around);
+ turnLeftLight = findViewById(R.id.module_ext_id_traffic_light_turn_left);
+ straightLight = findViewById(R.id.module_ext_id_traffic_light_straight);
+ turnRightLight = findViewById(R.id.module_ext_id_traffic_light_turn_right);
+
+ tvCurrentSpeed = findViewById(R.id.module_ext_id_tv_speed);
+
+ ivTurnIcon = findViewById(R.id.module_map_id_navi_next_info_road_turn_icon_in_vr_mode);
+ tvDistance = findViewById(R.id.module_map_id_navi_next_info_distance_in_vr_mode);
+ tvDistanceUnit = findViewById(R.id.module_map_id_navi_next_info_distance_unit_in_vr_mode);
+ tvNextRoad = findViewById(R.id.module_map_id_navi_next_info_road_in_vr_mode);
+ }
+
+ public void startNav() {
+ navGroup.setVisibility(View.VISIBLE);
+ speedGroup.setVisibility(View.GONE);
+ }
+
+ public void stopNav() {
+ speedGroup.setVisibility(View.VISIBLE);
+ navGroup.setVisibility(View.GONE);
+ }
+
+ public void refreshLimitSpeed(int limitSpeed) {
+ if(getVisibility() != View.VISIBLE){
+ return;
+ }
+ handler.removeMessages(MSG_HIDE_LIMIT_SPEED);
+ tvLimitSpeed.setVisibility(View.VISIBLE);
+ tvLimitSpeed.setText(String.valueOf(limitSpeed));
+ handler.sendEmptyMessageDelayed(MSG_HIDE_LIMIT_SPEED, HIDE_LIMIT_SPEED_DELAY);
+ }
+
+ @SuppressLint("SetTextI18n")
+ public void refreshCurrentSpeed(int speed) {
+ if (speedGroup.getVisibility() == View.VISIBLE) {
+ tvCurrentSpeed.setText(Integer.toString(speed));
+ }
+ }
+
+ /**
+ * 刷新红绿灯显示状态
+ *
+ * @param laneLight 固定数组长度为4的车道类型灯,从0-3依次代表 掉头,左转,执行,右转
+ * @param surplusTime 固定数组长度为4的剩余时长数组,从0-3依次代表 掉头,左转,执行,右转
+ */
+ public void refreshTrafficLightStatus(int[] laneLight, String[] surplusTime) {
+ turnAroundLight.setTrafficLightStatus(laneLight[0], surplusTime[0]);
+ turnLeftLight.setTrafficLightStatus(laneLight[1], surplusTime[1]);
+ straightLight.setTrafficLightStatus(laneLight[2], surplusTime[2]);
+ turnRightLight.setTrafficLightStatus(laneLight[3], surplusTime[3]);
}
@Override
public void notifyChanged(MogoNaviInfo naviInfo) {
+ if (naviInfo == null) {
+ return;
+ }
+ fillNextCrossDistance(tvDistance, tvDistanceUnit, naviInfo.getCurStepRetainDistance());
+ fillNextCrossIconType(ivTurnIcon, naviInfo.getIconResId());
+ tvNextRoad.setText(naviInfo.getNextRoadName());
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ handler.removeMessages(MSG_HIDE_LIMIT_SPEED);
+ }
+
+ @Override
+ public boolean isVisible() {
+ return navGroup.getVisibility() == View.VISIBLE;
+ }
+ private static final int MSG_HIDE_LIMIT_SPEED = 1001;
+ private static final long HIDE_LIMIT_SPEED_DELAY = 5000;
+ @Override
+ public boolean handleMessage(Message msg) {
+ if (!isAttachedToWindow()||getVisibility() != View.VISIBLE) {
+ return false;
+ }
+ if (msg.what == MSG_HIDE_LIMIT_SPEED) {
+ tvLimitSpeed.setVisibility(View.GONE);
+ return true;
+ }
+ return false;
}
}
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/AdasNoticeHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/AdasNoticeHelper.java
index a04b37eeab..0eb32beb06 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/AdasNoticeHelper.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/AdasNoticeHelper.java
@@ -13,6 +13,7 @@ import com.mogo.map.location.MogoLocation;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.entity.CloudRoadData;
import com.mogo.module.common.entity.MogoSnapshotSetData;
+import com.mogo.module.extensions.navi.VrModeNavInfoView;
import com.mogo.service.adas.IMogoAdasWarnMessageCallback;
import com.mogo.service.adas.MogoADASWarnType;
import com.mogo.service.adas.entity.ADASWarnMessage;
@@ -50,6 +51,8 @@ public class AdasNoticeHelper implements IMogoAdasWarnMessageCallback, IMogoLoca
private String lightStatus = "G";
private String surplusTime;
+ private VrModeNavInfoView vrModeNavInfoView;
+
private Handler handler = new Handler(this);
private boolean isObuLightData = false;
@@ -64,9 +67,10 @@ public class AdasNoticeHelper implements IMogoAdasWarnMessageCallback, IMogoLoca
Logger.d(TAG, "init====");
}
- public void initView(View root) {
+ public void initView(VrModeNavInfoView vrModeNavInfoView) {
if (lightCenter) {
}
+ this.vrModeNavInfoView = vrModeNavInfoView;
}
public void enterVrMode() {
@@ -116,6 +120,7 @@ public class AdasNoticeHelper implements IMogoAdasWarnMessageCallback, IMogoLoca
}
private void drawLimitSpeed() {
+ vrModeNavInfoView.refreshLimitSpeed(limitSpeed);
}
@Override
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java
index fbec2bd1a7..db2ab3a8fc 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/CameraLiveNoticeHelper.java
@@ -3,13 +3,12 @@ package com.mogo.module.extensions.utils;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.util.Log;
-import com.mogo.commons.AbsMogoApplication;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.marker.MogoMarkerOptions;
import com.mogo.module.common.MogoApisHandler;
-import com.mogo.module.common.constants.DataTypes;
import com.mogo.module.common.entity.CloudRoadData;
import com.mogo.module.common.entity.MogoSnapshotSetData;
import com.mogo.module.extensions.R;
@@ -18,6 +17,7 @@ import com.mogo.module.extensions.live.ExtensionServiceManager;
import com.mogo.module.extensions.live.PushDataType;
import com.mogo.service.connection.IMogoOnWebSocketMessageListener;
import com.mogo.service.connection.WebSocketMsgType;
+import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.logger.Logger;
@@ -26,20 +26,35 @@ import com.mogo.utils.logger.Logger;
*
*/
public class CameraLiveNoticeHelper implements IMogoOnWebSocketMessageListener {
- private static final String TAG = "CameraLiveNoticeHelper";
+ private static final String TAG = "liyz";
private Context mContext;
private static IMogoMarker mMogoMarker;
private CloudRoadData mCloudRoadData;
public void init(Context context) {
- Logger.d(TAG, "init====");
+ Logger.d(TAG, "init ======= ");
mContext = context;
+
+ //test
+// UiThreadHandler.postDelayed( () -> {
+// mCloudRoadData = new CloudRoadData();
+// mCloudRoadData.setRtmpUrl("rtmp://58.200.131.2:1935/livetv/hunantv");
+// mCloudRoadData.setLat(40.200353);
+// mCloudRoadData.setLon(116.745467);
+//// CameraLiveManager.getInstance().init(mCloudRoadData);
+// addCameraMarker(mCloudRoadData);
+// }, 2_000 );
+ }
+
+ public void enterVrMode() {
+ Logger.d(TAG, "enterVrMode===");
+ MogoApisHandler.getInstance().getApis().getWebSocketManagerApi(mContext).registerOnWebSocketMessageListener(this);
ExtensionServiceManager
.getMogoRegisterCenter().registerMogoMarkerClickListener(PushDataType.TYPE_PUSH_CAMERA_DATA, new IMogoMarkerClickListener() {
@Override
public boolean onMarkerClicked(IMogoMarker marker) {
- //点击的marker的具体数据 TODO
+ //点击的marker的具体数据
if (mCloudRoadData != null) {
CameraLiveManager.getInstance().init(mCloudRoadData);
} else {
@@ -51,10 +66,6 @@ public class CameraLiveNoticeHelper implements IMogoOnWebSocketMessageListener {
+ removeCameraMarker();
+ }, 1_000 );
+ }
} else {
- //删除marker TODO
- removeCameraMarker();
-
+ Log.e(TAG, "onMsgReceived obj == null ");
}
}
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java
index ce4008e550..054bdadf5e 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java
@@ -2,29 +2,23 @@ package com.mogo.module.extensions.utils;
import android.animation.Animator;
import android.os.Handler;
-import android.transition.AutoTransition;
-import android.transition.Transition;
-import android.transition.TransitionManager;
import android.util.ArrayMap;
-import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
-import android.widget.ImageView;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
-import androidx.constraintlayout.widget.ConstraintSet;
-import androidx.constraintlayout.widget.Group;
-import com.mogo.commons.debug.DebugConfig;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.map.MapCenterPointStrategy;
import com.mogo.module.common.map.Scene;
import com.mogo.module.extensions.ExtensionsModuleConst;
import com.mogo.module.extensions.R;
+import com.mogo.module.extensions.navi.AnimNavInfoView;
import com.mogo.module.extensions.navi.TopView;
+import com.mogo.module.extensions.navi.VrModeNavInfoView;
import com.mogo.service.windowview.IMogoTopViewStatusListener;
import com.mogo.utils.logger.Logger;
@@ -42,21 +36,11 @@ public class TopViewAnimHelper {
private static final String TAG = "TopViewAnimHelper";
private ConstraintLayout topMotionLayout;
- private Group remainTimeGroup, remainDistanceGroup, arriveTimeGroup;
- private View naviBg;
-
- private ImageView ivTurnIcon;
- private TextView tvNextDistance;
- private TextView tvNextRoad;
- private TextView tvNextDistanceUnit;
- private TextView tvTurnInfo;
private TopView topContainer;
- private TextView tvDestinationOnlineCar;
-
- private ConstraintSet constraintSet;
- private Transition transition;
private TextView cameraMode;
+ private AnimNavInfoView animNavInfoView;
+ private VrModeNavInfoView vrModeNavInfoView;
private float topHeight = 0f;
@@ -89,80 +73,13 @@ public class TopViewAnimHelper {
}
public void init(ConstraintLayout rootView, OnTopViewAnimSimpleListener listener) {
-
- constraintSet = new ConstraintSet();
- transition = new AutoTransition();
-
topMotionLayout = rootView;
- naviBg = rootView.findViewById(R.id.module_map_id_navi_bg);
- remainTimeGroup = rootView.findViewById(R.id.remainTimeGroup);
- remainDistanceGroup = rootView.findViewById(R.id.remainDistanceGroup);
- arriveTimeGroup = rootView.findViewById(R.id.arriveTimeGroup);
topContainer = rootView.findViewById(R.id.module_entrance_id_top_container);
- tvNextDistanceUnit = rootView.findViewById(R.id.module_map_id_navi_next_info_distance_unit);
- tvTurnInfo = rootView.findViewById(R.id.module_map_id_navi_next_info_turn_info);
- tvDestinationOnlineCar = rootView.findViewById(R.id.module_ext_id_destination_online_car);
+ animNavInfoView = rootView.findViewById(R.id.module_ext_id_anim_nav_info);
+ vrModeNavInfoView = rootView.findViewById(R.id.module_ext_id_vr_nav_info);
topContainer.setSlideListener(this::startLatestTopOutAnim);
- ivTurnIcon = rootView.findViewById(R.id.module_map_id_navi_next_info_road_turn_icon);
- tvNextDistance = rootView.findViewById(R.id.module_map_id_navi_next_info_distance);
- tvNextRoad = rootView.findViewById(R.id.module_map_id_navi_next_info_road);
- transition.setDuration(200);
-
- transition.addListener(new Transition.TransitionListener() {
- @Override
- public void onTransitionStart(Transition transition) {
- if (listener != null) {
- listener.onAnimStart();
- }
- }
-
- @Override
- public void onTransitionEnd(Transition transition) {
-// if (isTopViewOut) {
-// topContainer.removeAllViews();
-// }
- if (listener != null) {
- listener.onAnimEnd();
- }
- Logger.d(TAG, "onTransitionEnd: " + currentAnimatingView);
- IMogoTopViewStatusListener listener;
- if (isTopViewOut) {
- int lastCount = topContainer.getChildCount();
- for (int i = 0; i < lastCount; i++) {
- View child = topContainer.getChildAt(i);
- viewCaches.remove(child);
- listener = statusListenerMap.remove(child);
- if (listener != null) {
- listener.onViewRemoved(child);
- }
- }
- topContainer.removeAllViews();
- } else {
- listener = statusListenerMap.get(currentAnimatingView);
- if (listener != null) {
- listener.onViewAdded(currentAnimatingView);
- }
- }
- }
-
- @Override
- public void onTransitionCancel(Transition transition) {
-
- }
-
- @Override
- public void onTransitionPause(Transition transition) {
-
- }
-
- @Override
- public void onTransitionResume(Transition transition) {
-
- }
- });
-
cameraMode = rootView.findViewById(R.id.module_ext_id_north);
// 初始化默认隐藏导航
hideNaviView();
@@ -284,6 +201,7 @@ public class TopViewAnimHelper {
}
if (!viewCaches.contains(view)) {
// 判断此view是否已经增加到了顶部view,如果增加过就不增加了
+ currentAnimatingView = view;
view.setTranslationY(0);
statusListenerMap.put(view, statusListener);
Logger.d(TAG, "开始执行");
@@ -313,14 +231,11 @@ public class TopViewAnimHelper {
// 如果高度变化,生硬的变化一下高度
Logger.d(TAG, "container.height: " + topContainer.getHeight());
if (topContainer.getHeight() != params.height) {
- constraintSet.clone(topMotionLayout);
+ // 改变topContainer的translationY
+ topContainer.setTranslationY(params.height);
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的高度===");
}
@@ -331,6 +246,9 @@ public class TopViewAnimHelper {
if (statusListenerMap.get(view) != null) {
statusListenerMap.get(view).beforeViewAddAnim(view);
}
+ if (animNavInfoView.isVisible()) {
+ animNavInfoView.animate().translationY(computeNaviMarginTop(params.height)).start();
+ }
view.animate().translationY(0).setDuration(500).setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
@@ -358,11 +276,7 @@ public class TopViewAnimHelper {
}).start();
} else {
// 顶部view还没有内容,需要整体下移
- currentAnimatingView = view;
viewCaches.add(view);
-// if (naviBg.getVisibility() == View.VISIBLE) {
-// 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);
@@ -372,85 +286,18 @@ public class TopViewAnimHelper {
topContainer.setChildAddedListener(child -> {
try {
topContainer.setChildAddedListener(null);
- if (naviBg.getVisibility() == View.VISIBLE) {
- remainDistanceGroup.setVisibility(View.GONE);
- remainTimeGroup.setVisibility(View.GONE);
- arriveTimeGroup.setVisibility(View.GONE);
- }
NoMapTopViewShaderHelper.getInstance().showShader();
-
- constraintSet.clone(topMotionLayout);
-
- constraintSet.clear(R.id.module_entrance_id_top_container,
- ConstraintSet.BOTTOM);
- constraintSet.connect(R.id.module_entrance_id_top_container,
- ConstraintSet.TOP,
- R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP);
-// if (CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X) {
- TransitionManager.beginDelayedTransition(topMotionLayout, transition);
-// }
checkCameraModePosition(false);
- if (naviBg.getVisibility() == View.VISIBLE) {
- // 约束设置需要在applyTo()方法之前执行,visiable设置需要在applyTo()
- // 方法之后执行才能生效,所以分开了两个判断,至于为什么这么做才能生效,不得而知
- constraintSet.connect(tvNextDistance.getId(), ConstraintSet.BOTTOM,
- ivTurnIcon.getId(), ConstraintSet.BOTTOM);
- constraintSet.connect(ivTurnIcon.getId(), ConstraintSet.LEFT,
- naviBg.getId(), ConstraintSet.LEFT,
- (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_marginLeft));
-// constraintSet.clear(tvNextRoad.getId(), ConstraintSet.BOTTOM);
- constraintSet.connect(tvNextRoad.getId(), ConstraintSet.BOTTOM,
- tvNextDistance.getId(), ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.module_map_id_navi_next_info_road_marginBottom_small));
- constraintSet.connect(tvNextRoad.getId(), ConstraintSet.LEFT,
- R.id.module_map_id_navi_next_info_turn_info,
- ConstraintSet.RIGHT,
- (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.dp_46));
-
- constraintSet.clear(ivTurnIcon.getId(), ConstraintSet.TOP);
- constraintSet.connect(ivTurnIcon.getId(), ConstraintSet.BOTTOM,
- naviBg.getId(), ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.module_ext_navi_info_turn_icon_margin_bottom));
-
- constraintSet.connect(naviBg.getId(), ConstraintSet.TOP,
- R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP,
- computeNaviMarginTop(params.height));
-
- // 动态改变相关字体大小
- tvNextDistance.setTextSize(TypedValue.COMPLEX_UNIT_PX,
- getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_textSize_small));
- tvNextDistanceUnit.setTextSize(TypedValue.COMPLEX_UNIT_PX,
- getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_unit_textSize_small));
-
- // 改变目的地车友的约束
- constraintSet.clear(tvDestinationOnlineCar.getId(),ConstraintSet.LEFT);
- constraintSet.clear(tvDestinationOnlineCar.getId(),ConstraintSet.TOP);
- constraintSet.connect(tvDestinationOnlineCar.getId(),
- ConstraintSet.BOTTOM, naviBg.getId(), ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.module_ext_navi_small_margin_bottom));
-
- constraintSet.connect(tvDestinationOnlineCar.getId(),
- ConstraintSet.RIGHT, naviBg.getId(), ConstraintSet.RIGHT,
- (int) getDimen(R.dimen.module_ext_navi_small_margin_right));
- }
- constraintSet.applyTo(topMotionLayout);
- ivTurnIcon.getLayoutParams().height =
- (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_height);
- ivTurnIcon.getLayoutParams().width =
- (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_width);
- naviBg.getLayoutParams().height =
- (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.module_ext_navi_info_panel_small_height);
-
- tvDestinationOnlineCar.getLayoutParams().height =
- (int) getDimen(R.dimen.module_ext_button_height_small);
- tvDestinationOnlineCar.setBackgroundResource(R.drawable.module_ext_dw_navi_info_panel_small_bkg);
int scene = 0;
- if (naviBg.getVisibility() == View.VISIBLE) {
+ if (animNavInfoView.isVisible()) {
scene = Scene.NAVI_WITH_ROAD_EVENT;
+ animNavInfoView.animate().translationY(computeNaviMarginTop(child.getHeight())).start();
+ animNavInfoView.exchangeToSmall(true);
} else {
scene = Scene.AIMLESS_WITH_ROAD_EVENT;
}
+ topContainer.animate().translationY(child.getHeight()).setListener(mainAnimListener).start();
Logger.d(TAG, "show top setMapCenterPointByScene: " + scene);
MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene);
} catch (Exception e) {
@@ -462,6 +309,10 @@ public class TopViewAnimHelper {
}
MogoApisHandler.getInstance().getApis().getStatusManagerApi().setTopViewShow(ExtensionsModuleConst.TYPE_ENTRANCE, true);
+ // vr模式下与TopView互斥
+ if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) {
+ TopViewNoLinkageAnimHelper.getInstance().removeAllView();
+ }
}
/**
@@ -487,68 +338,17 @@ public class TopViewAnimHelper {
statusListenerMap.get(view).beforeViewRemoveAnim(view);
}
isTopViewOut = true;
- if (naviBg.getVisibility() == View.VISIBLE) {
- remainDistanceGroup.setVisibility(View.VISIBLE);
- remainTimeGroup.setVisibility(View.VISIBLE);
- arriveTimeGroup.setVisibility(View.VISIBLE);
- tvNextDistance.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_textSize));
- tvNextDistanceUnit.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_unit_textSize));
- }
NoMapTopViewShaderHelper.getInstance().hideShader();
- constraintSet.clone(topMotionLayout);
+ topContainer.animate().translationY(-topContainer.getTranslationY()).setListener(mainAnimListener).start();
- constraintSet.clear(R.id.module_entrance_id_top_container, ConstraintSet.TOP);
- constraintSet.connect(R.id.module_entrance_id_top_container, ConstraintSet.BOTTOM,
- R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP);
- TransitionManager.beginDelayedTransition(topMotionLayout, transition);
checkCameraModePosition(false);
- if (naviBg.getVisibility() == View.VISIBLE) {
- // 约束设置需要在applyTo()方法之前执行,visiable设置需要在applyTo()
- // 方法之后执行才能生效,所以分开了两个判断,至于为什么这么做才能生效,不得而知
- constraintSet.clear(tvNextDistance.getId(), ConstraintSet.BOTTOM);
-// constraintSet.clear(tvNextRoad.getId(), ConstraintSet.BASELINE);
- constraintSet.connect(ivTurnIcon.getId(), ConstraintSet.LEFT,
- naviBg.getId(), ConstraintSet.LEFT,
- (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_marginLeft));
- constraintSet.connect(tvNextRoad.getId(), ConstraintSet.BOTTOM,
- ivTurnIcon.getId(), ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.module_map_id_navi_next_info_road_marginBottom));
- constraintSet.connect(tvNextRoad.getId(), ConstraintSet.LEFT,
- tvNextDistance.getId(), ConstraintSet.LEFT,
- 0);
- constraintSet.connect(naviBg.getId(), ConstraintSet.TOP,
- R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP,
- (int) getDimen(R.dimen.module_common_shadow_width_pos));
- constraintSet.connect(ivTurnIcon.getId(), ConstraintSet.TOP, naviBg.getId(),
- ConstraintSet.TOP, 0);
- constraintSet.connect(ivTurnIcon.getId(), ConstraintSet.BOTTOM,
- naviBg.getId(), ConstraintSet.BOTTOM, 0);
-
- constraintSet.clear(tvDestinationOnlineCar.getId(),ConstraintSet.RIGHT);
- constraintSet.clear(tvDestinationOnlineCar.getId(),ConstraintSet.BOTTOM);
- constraintSet.connect(tvDestinationOnlineCar.getId(), ConstraintSet.LEFT,
- naviBg.getId(), ConstraintSet.LEFT);
- constraintSet.connect(tvDestinationOnlineCar.getId(), ConstraintSet.TOP,
- naviBg.getId(), ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.module_ext_camera_button_marginTop));
- }
- constraintSet.applyTo(topMotionLayout);
-
- ivTurnIcon.getLayoutParams().height =
- (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_height);
- ivTurnIcon.getLayoutParams().width =
- (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_width);
- naviBg.getLayoutParams().height =
- (int) topMotionLayout.getContext().getResources().getDimension(R.dimen.module_ext_navi_info_panel_height);
-
- tvDestinationOnlineCar.getLayoutParams().height =
- (int) getDimen(R.dimen.module_ext_button_height);
- tvDestinationOnlineCar.setBackgroundResource(R.drawable.module_ext_dw_navi_info_panel_bkg);
int scene = 0;
- if (naviBg.getVisibility() == View.VISIBLE) {
+ if (animNavInfoView.isVisible()) {
+ animNavInfoView.animate().translationY(0).start();
+ animNavInfoView.exchangeToBig(true);
scene = Scene.NAVI;
} else {
scene = Scene.AIMLESS;
@@ -560,107 +360,23 @@ public class TopViewAnimHelper {
}
public void showNaviView() {
-
if (topMotionLayout == null) {
return;
}
Logger.d("TopViewAnimHelper", "showNaviView=====");
- setNaviVisibility(View.VISIBLE);
+ if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) {
+ vrModeNavInfoView.startNav();
+ } else {
+ animNavInfoView.setVisibility(View.VISIBLE);
+ }
int scene = 0;
if (isTopViewOut) {
- remainDistanceGroup.setVisibility(View.VISIBLE);
- remainTimeGroup.setVisibility(View.VISIBLE);
- arriveTimeGroup.setVisibility(View.VISIBLE);
- tvNextDistance.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_textSize));
- tvNextDistanceUnit.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_unit_textSize));
-
- tvDestinationOnlineCar.getLayoutParams().height =
- (int) getDimen(R.dimen.module_ext_button_height);
- tvDestinationOnlineCar.setBackgroundResource(R.drawable.module_ext_dw_navi_info_panel_bkg);
-
- // 调整约束
- constraintSet.clone(topMotionLayout);
- constraintSet.clear(tvNextDistance.getId(), ConstraintSet.BOTTOM);
-// constraintSet.clear(tvNextRoad.getId(), ConstraintSet.BASELINE);
- constraintSet.connect(ivTurnIcon.getId(), ConstraintSet.LEFT,
- naviBg.getId(), ConstraintSet.LEFT,
- (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_marginLeft));
- constraintSet.connect(tvNextRoad.getId(), ConstraintSet.BOTTOM, ivTurnIcon.getId(),
- ConstraintSet.BOTTOM);
- constraintSet.connect(tvNextRoad.getId(), ConstraintSet.LEFT,
- tvNextDistance.getId(), ConstraintSet.LEFT,
- 0);
-// ivTurnIcon.getLayoutParams().height =
-// (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_height);
-// ivTurnIcon.getLayoutParams().width =
-// (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_width);
-// naviBg.getLayoutParams().height =
-// (int) topMotionLayout.getContext().getResources().getDimension(R.dimen
-// .module_ext_navi_info_panel_height);
- constraintSet.connect(naviBg.getId(), ConstraintSet.TOP,
- R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP,
- (int) getDimen(R.dimen.module_common_shadow_width_pos));
- constraintSet.connect(ivTurnIcon.getId(), ConstraintSet.TOP, naviBg.getId(),
- ConstraintSet.TOP, 0);
- constraintSet.connect(ivTurnIcon.getId(), ConstraintSet.BOTTOM,
- naviBg.getId(), ConstraintSet.BOTTOM, 0);
-
- // 目的地车友
- constraintSet.clear(tvDestinationOnlineCar.getId(),ConstraintSet.RIGHT);
- constraintSet.clear(tvDestinationOnlineCar.getId(),ConstraintSet.BOTTOM);
- constraintSet.connect(tvDestinationOnlineCar.getId(), ConstraintSet.LEFT,
- naviBg.getId(), ConstraintSet.LEFT);
- constraintSet.connect(tvDestinationOnlineCar.getId(), ConstraintSet.TOP,
- naviBg.getId(), ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.module_ext_camera_button_marginTop));
-
- constraintSet.applyTo(topMotionLayout);
scene = Scene.NAVI_WITH_ROAD_EVENT;
+ animNavInfoView.exchangeToBig(false);
} else {
- remainDistanceGroup.setVisibility(View.GONE);
- remainTimeGroup.setVisibility(View.GONE);
- arriveTimeGroup.setVisibility(View.GONE);
- tvNextDistance.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_textSize_small));
- tvNextDistanceUnit.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_unit_textSize_small));
-
- tvDestinationOnlineCar.getLayoutParams().height =
- (int) getDimen(R.dimen.module_ext_button_height_small);
- tvDestinationOnlineCar.setBackgroundResource(R.drawable.module_ext_dw_navi_info_panel_small_bkg);
- // 调整约束
- constraintSet.clone(topMotionLayout);
- constraintSet.connect(tvNextDistance.getId(), ConstraintSet.BOTTOM,
- ivTurnIcon.getId(), ConstraintSet.BOTTOM);
- constraintSet.connect(ivTurnIcon.getId(), ConstraintSet.LEFT,
- naviBg.getId(), ConstraintSet.LEFT,
- (int) getDimen(R.dimen.module_ext_navi_info_panel_turn_icon_small_marginLeft));
-// constraintSet.clear(tvNextRoad.getId(), ConstraintSet.BOTTOM);
- constraintSet.connect(tvNextRoad.getId(), ConstraintSet.BOTTOM,
- tvNextDistance.getId(), ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.module_map_id_navi_next_info_road_marginBottom_small));
- constraintSet.connect(tvNextRoad.getId(), ConstraintSet.LEFT,
- R.id.module_map_id_navi_next_info_turn_info, ConstraintSet.RIGHT,
- (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,
- computeNaviMarginTop(topContainer.getHeight()));
- constraintSet.clear(ivTurnIcon.getId(), ConstraintSet.TOP);
- constraintSet.connect(ivTurnIcon.getId(), ConstraintSet.BOTTOM,
- naviBg.getId(), ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.module_ext_navi_info_turn_icon_margin_bottom));
-
- // 目的地车友
- constraintSet.clear(tvDestinationOnlineCar.getId(),ConstraintSet.LEFT);
- constraintSet.clear(tvDestinationOnlineCar.getId(),ConstraintSet.TOP);
- constraintSet.connect(tvDestinationOnlineCar.getId(),
- ConstraintSet.BOTTOM, naviBg.getId(), ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.module_ext_navi_small_margin_bottom));
- constraintSet.connect(tvDestinationOnlineCar.getId(),
- ConstraintSet.RIGHT, naviBg.getId(), ConstraintSet.RIGHT,
- (int) getDimen(R.dimen.module_ext_navi_small_margin_right));
-
- constraintSet.applyTo(topMotionLayout);
scene = Scene.NAVI;
+ animNavInfoView.exchangeToSmall(false);
}
Logger.d(TAG, "navi show setMapCenterPointByScene: " + scene);
MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene);
@@ -668,16 +384,13 @@ public class TopViewAnimHelper {
}
public void hideNaviView() {
-
if (topMotionLayout == null) {
return;
}
Logger.d("TopViewAnimHelper", "hideNaviView=====");
- setNaviVisibility(View.GONE);
- remainDistanceGroup.setVisibility(View.GONE);
- remainTimeGroup.setVisibility(View.GONE);
- arriveTimeGroup.setVisibility(View.GONE);
+ animNavInfoView.setVisibility(View.GONE);
+ vrModeNavInfoView.stopNav();
int scene = 0;
if (isTopViewOut) {
scene = Scene.AIMLESS;
@@ -690,27 +403,6 @@ public class TopViewAnimHelper {
}
private void checkCameraModePosition(boolean isNeedClone) {
- if (isNeedClone) {
- constraintSet.clone(topMotionLayout);
- }
- if (naviBg.getVisibility() == View.VISIBLE) {
- constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP, naviBg.getId(),
- ConstraintSet.BOTTOM, (int) getDimen(R.dimen.dp_30));
- } else {
- if (isTopViewOut) {
- constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP, naviBg.getId(),
- ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.module_ext_north_goneMarginTop));
- } else {
- constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP,
- R.id.module_entrance_id_top_container,
- ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.dp_30));
- }
- }
- if (isNeedClone) {
- constraintSet.applyTo(topMotionLayout);
- }
}
private float getDimen(int resId) {
@@ -718,7 +410,7 @@ public class TopViewAnimHelper {
}
private int computeNaviMarginTop(int height) {
- int result = (int) (height - (getDimen(R.dimen.module_ext_top_over_navi_height))-getDimen(R.dimen.module_common_shadow_width_pos));
+ int result = (int) (height - (getDimen(R.dimen.module_ext_top_over_navi_height)) - getDimen(R.dimen.module_common_shadow_width_pos));
Logger.d(TAG, "computeNaviMarginTop: " + height + " result: " + result);
return result;
}
@@ -733,24 +425,11 @@ public class TopViewAnimHelper {
return viewCaches.contains(view);
}
- private void setNaviVisibility(int visibility) {
- ivTurnIcon.setVisibility(visibility);
- tvNextRoad.setVisibility(visibility);
- tvNextDistance.setVisibility(visibility);
- remainTimeGroup.setVisibility(visibility);
- remainDistanceGroup.setVisibility(visibility);
- arriveTimeGroup.setVisibility(visibility);
- naviBg.setVisibility(visibility);
- tvNextDistanceUnit.setVisibility(visibility);
- tvTurnInfo.setVisibility(visibility);
- if(DebugConfig.isSupportedSearchDestinationOnlineCarList()) {
- tvDestinationOnlineCar.setVisibility(visibility);
- }
-
- }
-
- public void removeAllView(){
- Logger.d(TAG, "remove all view");
+ /**
+ * 用于和{@link TopViewNoLinkageAnimHelper}互斥显示
+ */
+ public void removeAllViewExceptVrNav() {
+ Logger.d(TAG, "remove all view except vr nav");
isTopViewOut = true;
int lastCount = topContainer.getChildCount();
for (int i = 0; i < lastCount; i++) {
@@ -765,35 +444,76 @@ public class TopViewAnimHelper {
topContainer.removeAllViews();
hideNaviView();
MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, Scene.AIMLESS);
+
}
- public void clear(){
+ public void removeAllView() {
+ Logger.d(TAG, "remove all view");
+ removeAllViewExceptVrNav();
+ vrModeNavInfoView.setVisibility(View.GONE);
+ }
+
+ public void clear() {
topMotionLayout = null;
- remainTimeGroup = null;
- remainDistanceGroup = null;
- arriveTimeGroup = null;
- naviBg = null;
- ivTurnIcon = null;
- tvNextDistance = null;
- tvNextRoad = null;
- tvNextDistanceUnit = null;
- tvTurnInfo = null;
topContainer = null;
cameraMode = null;
- transition = null;
}
- public void enterVrMode(){
+ public void enterVrMode() {
removeAllView();
topContainer.getLayoutParams().width = (int) getDimen(R.dimen.module_ext_top_view_width_in_vr_mode);
+ vrModeNavInfoView.setVisibility(View.VISIBLE);
// topContainer.requestLayout();
// topMotionLayout.requestLayout();
}
- public void exitVrMode(){
+ public void exitVrMode() {
removeAllView();
topContainer.getLayoutParams().width = (int) getDimen(R.dimen.module_ext_top_view_width);
// topContainer.requestLayout();
// topMotionLayout.requestLayout();
}
+
+ private final Animator.AnimatorListener mainAnimListener = new Animator.AnimatorListener() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ Logger.d(TAG, "onMainAnimEnd: " + currentAnimatingView);
+ IMogoTopViewStatusListener listener;
+ if (isTopViewOut) {
+ int lastCount = topContainer.getChildCount();
+ for (int i = 0; i < lastCount; i++) {
+ View child = topContainer.getChildAt(i);
+ viewCaches.remove(child);
+ listener = statusListenerMap.remove(child);
+ if (listener != null) {
+ listener.onViewRemoved(child);
+ }
+ }
+ topContainer.removeAllViews();
+ currentAnimatingView = null;
+ } else {
+ listener = statusListenerMap.get(currentAnimatingView);
+ if (listener != null) {
+ listener.onViewAdded(currentAnimatingView);
+ }
+ }
+
+ }
+
+ @Override
+ public void onAnimationCancel(Animator animation) {
+
+ }
+
+ @Override
+ public void onAnimationRepeat(Animator animation) {
+
+ }
+ };
+
}
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewNoLinkageAnimHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewNoLinkageAnimHelper.java
index 74f6808116..d9b55cfd0a 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewNoLinkageAnimHelper.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewNoLinkageAnimHelper.java
@@ -2,20 +2,14 @@ package com.mogo.module.extensions.utils;
import android.animation.Animator;
import android.os.Handler;
-import android.transition.AutoTransition;
import android.transition.Transition;
-import android.transition.TransitionManager;
import android.util.ArrayMap;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
-import android.widget.ImageView;
-import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;
-import androidx.constraintlayout.widget.Group;
-import com.mogo.commons.debug.DebugConfig;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.map.MapCenterPointStrategy;
@@ -40,20 +34,8 @@ public class TopViewNoLinkageAnimHelper {
private static final String TAG = "TopViewNoLinkageAnimHelper";
private ConstraintLayout topMotionLayout;
- private Group remainTimeGroup, remainDistanceGroup, arriveTimeGroup;
- private View naviBg;
-
- private ImageView ivTurnIcon;
- private TextView tvNextDistance;
- private TextView tvNextRoad;
- private TextView tvNextDistanceUnit;
- private TextView tvTurnInfo;
private TopView topContainerNoLinkage;
- private ConstraintSet constraintSet;
- private Transition transition;
- private TextView cameraMode;
-
private float topHeight = 0f;
private Handler handler = new Handler();
@@ -85,82 +67,10 @@ public class TopViewNoLinkageAnimHelper {
}
public void init(ConstraintLayout rootView, OnTopViewAnimSimpleListener listener) {
-
- constraintSet = new ConstraintSet();
- transition = new AutoTransition();
-
topMotionLayout = rootView;
- naviBg = rootView.findViewById(R.id.module_map_id_navi_bg);
- remainTimeGroup = rootView.findViewById(R.id.remainTimeGroup);
- remainDistanceGroup = rootView.findViewById(R.id.remainDistanceGroup);
- arriveTimeGroup = rootView.findViewById(R.id.arriveTimeGroup);
topContainerNoLinkage = rootView.findViewById(R.id.module_entrance_id_top_container_no_linkage);
- tvNextDistanceUnit = rootView.findViewById(R.id.module_map_id_navi_next_info_distance_unit);
- tvTurnInfo = rootView.findViewById(R.id.module_map_id_navi_next_info_turn_info);
topContainerNoLinkage.setSlideListener(this::startLatestTopOutAnim);
-
- ivTurnIcon = rootView.findViewById(R.id.module_map_id_navi_next_info_road_turn_icon);
- tvNextDistance = rootView.findViewById(R.id.module_map_id_navi_next_info_distance);
- tvNextRoad = rootView.findViewById(R.id.module_map_id_navi_next_info_road);
- transition.setDuration(200);
-
- transition.addListener(new Transition.TransitionListener() {
- @Override
- public void onTransitionStart(Transition transition) {
- if (listener != null) {
- listener.onAnimStart();
- }
- }
-
- @Override
- public void onTransitionEnd(Transition transition) {
-// if (isTopViewOut) {
-// topContainer.removeAllViews();
-// }
- if (listener != null) {
- listener.onAnimEnd();
- }
- Logger.d(TAG, "onTransitionEnd: " + currentAnimatingView);
- IMogoTopViewStatusListener listener;
- if (isTopViewOut) {
- int lastCount = topContainerNoLinkage.getChildCount();
- for (int i = 0; i < lastCount; i++) {
- View child = topContainerNoLinkage.getChildAt(i);
- viewCaches.remove(child);
- listener = statusListenerMap.remove(child);
- if (listener != null) {
- listener.onViewRemoved(child);
- }
- }
- topContainerNoLinkage.removeAllViews();
- } else {
- listener = statusListenerMap.get(currentAnimatingView);
- if (listener != null) {
- listener.onViewAdded(currentAnimatingView);
- }
- }
- }
-
- @Override
- public void onTransitionCancel(Transition transition) {
-
- }
-
- @Override
- public void onTransitionPause(Transition transition) {
-
- }
-
- @Override
- public void onTransitionResume(Transition transition) {
-
- }
- });
-
- cameraMode = rootView.findViewById(R.id.module_ext_id_north);
- // 初始化默认隐藏导航
- hideNaviView();
}
private volatile boolean isTopViewOut = true;
@@ -169,100 +79,6 @@ public class TopViewNoLinkageAnimHelper {
private View currentAnimatingView = null;
- public void addSubView(View subView, LayoutParams params,
- IMogoTopViewStatusListener statusListener) {
- if (isTopViewOut || topContainerNoLinkage.getChildCount() == 0) {
- throw new IllegalStateException("no base view in top view");
- }
- if (subView == null) {
- throw new IllegalArgumentException("method addTopView params view is null");
- }
- if (params == null) {
- throw new IllegalArgumentException("method addTopView params LayoutParams is null");
- }
-
- // 是在已经添加过view之后,才能添加sub view,所以直接走增加小view的逻辑就行
- if (!viewCaches.contains(subView)) {
- viewCaches.add(subView);
- statusListenerMap.put(subView, statusListener);
- subView.setTranslationY(0);
- subView.setTranslationY(-(params.height));
- topContainerNoLinkage.addView(subView, params);
- Logger.d(TAG, "添加subView: " + subView.getTranslationY() + " height:" +
- " " + subView.getHeight() + " paramsHeight: " + params.height);
- if (statusListenerMap.get(subView) != null) {
- statusListenerMap.get(subView).beforeViewAddAnim(subView);
- }
- subView.animate().translationY(0).setDuration(500).setListener(new Animator.AnimatorListener() {
- @Override
- public void onAnimationStart(Animator animation) {
-
- }
-
- @Override
- public void onAnimationEnd(Animator animation) {
- IMogoTopViewStatusListener listener = statusListenerMap.get(subView);
- if (listener != null) {
- listener.onViewAdded(subView);
- }
- }
-
- @Override
- public void onAnimationCancel(Animator animation) {
-
- }
-
-
- @Override
- public void onAnimationRepeat(Animator animation) {
-
- }
- }).start();
- }
-
- }
-
- public void removeSubView(View subView) {
- if (topContainerNoLinkage.getChildCount() < 2) {
- throw new IllegalStateException("view count not enough");
- }
- Logger.d(TAG,
- "小view退出: " + subView.getTranslationY() + " height: " + subView.getHeight());
- if (statusListenerMap.get(subView) != null) {
- statusListenerMap.get(subView).beforeViewRemoveAnim(subView);
- }
- subView.animate().translationY(-(subView.getHeight())).setDuration(500).setListener(new Animator.AnimatorListener() {
- @Override
- public void onAnimationStart(Animator animation) {
-
- }
-
- @Override
- public void onAnimationEnd(Animator animation) {
- Logger.d(TAG, "onAnimationEnd: " + subView);
- viewCaches.remove(subView);
- topContainerNoLinkage.removeView(subView);
- IMogoTopViewStatusListener listener = statusListenerMap.remove(subView);
- if (listener != null) {
- listener.onViewRemoved(subView);
- } else {
- Logger.d(TAG, "listener is null");
- }
- }
-
- @Override
- public void onAnimationCancel(Animator animation) {
- viewCaches.remove(subView);
- topContainerNoLinkage.removeView(subView);
- }
-
- @Override
- public void onAnimationRepeat(Animator animation) {
-
- }
- }).start();
- }
-
public void startTopInAnim(View view, LayoutParams params,
IMogoTopViewStatusListener statusListener) {
@@ -308,14 +124,10 @@ public class TopViewNoLinkageAnimHelper {
// 如果高度变化,生硬的变化一下高度
Logger.d(TAG, "container.height: " + topContainerNoLinkage.getHeight());
if (topContainerNoLinkage.getHeight() != params.height) {
- constraintSet.clone(topMotionLayout);
LayoutParams p = topContainerNoLinkage.getLayoutParams();
p.height = params.height;
topContainerNoLinkage.setLayoutParams(p);
- constraintSet.connect(naviBg.getId(), ConstraintSet.TOP,
- R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP,
- computeNaviMarginTop(params.height));
- constraintSet.applyTo(topMotionLayout);
+ topContainerNoLinkage.setTranslationY(params.height);
Logger.d(TAG, "改变container的高度===");
}
@@ -363,19 +175,8 @@ public class TopViewNoLinkageAnimHelper {
}
topContainerNoLinkage.setChildAddedListener(child -> {
topContainerNoLinkage.setChildAddedListener(null);
-
NoMapTopViewShaderHelper.getInstance().showShader();
-
- constraintSet.clone(topMotionLayout);
-
- constraintSet.clear(R.id.module_entrance_id_top_container_no_linkage,
- ConstraintSet.BOTTOM);
- constraintSet.connect(R.id.module_entrance_id_top_container_no_linkage, ConstraintSet.TOP,
- R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP);
- TransitionManager.beginDelayedTransition(topMotionLayout, transition);
- checkCameraModePosition(false);
- constraintSet.applyTo(topMotionLayout);
-
+ topContainerNoLinkage.animate().translationY(child.getHeight()).setListener(mainAnimListener).start();
int scene = Scene.AIMLESS_WITH_ROAD_EVENT;
Logger.d(TAG, "show top setMapCenterPointByScene: " + scene);
MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene);
@@ -387,7 +188,7 @@ public class TopViewNoLinkageAnimHelper {
// vr模式下与TopView互斥
if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) {
- TopViewAnimHelper.getInstance().removeAllView();
+ TopViewAnimHelper.getInstance().removeAllViewExceptVrNav();
}
}
@@ -395,9 +196,7 @@ public class TopViewNoLinkageAnimHelper {
* 退出最新的(也就是最上面的)view
*/
private void startLatestTopOutAnim() {
- if (topContainerNoLinkage.getChildCount() > 1) {
- removeSubView(topContainerNoLinkage.getChildAt(topContainerNoLinkage.getChildCount() - 1));
- } else if (topContainerNoLinkage.getChildCount() > 0) {
+ if (topContainerNoLinkage.getChildCount() > 0) {
startTopOutAnim(topContainerNoLinkage.getChildAt(topContainerNoLinkage.getChildCount() - 1));
}
}
@@ -414,16 +213,7 @@ public class TopViewNoLinkageAnimHelper {
}
isTopViewOut = true;
NoMapTopViewShaderHelper.getInstance().hideShader();
- constraintSet.clone(topMotionLayout);
-
- constraintSet.clear(R.id.module_entrance_id_top_container_no_linkage, ConstraintSet.TOP);
- constraintSet.connect(R.id.module_entrance_id_top_container_no_linkage, ConstraintSet.BOTTOM,
- R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP);
- TransitionManager.beginDelayedTransition(topMotionLayout, transition);
- checkCameraModePosition(false);
-
- constraintSet.applyTo(topMotionLayout);
-
+ topContainerNoLinkage.animate().translationY(-topContainerNoLinkage.getTranslationY()).setListener(mainAnimListener).start();
int scene = Scene.AIMLESS;
Logger.d(TAG, "hide top setMapCenterPointByScene: " + scene);
MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene);
@@ -431,61 +221,10 @@ public class TopViewNoLinkageAnimHelper {
}
}
- public void hideNaviView() {
- if (topMotionLayout == null) {
- return;
- }
-
- Logger.d(TAG, "hideNaviView=====");
- setNaviVisibility(View.GONE);
- remainDistanceGroup.setVisibility(View.GONE);
- remainTimeGroup.setVisibility(View.GONE);
- arriveTimeGroup.setVisibility(View.GONE);
- int scene = 0;
- if (isTopViewOut) {
- scene = Scene.AIMLESS;
- } else {
- scene = Scene.AIMLESS_WITH_ROAD_EVENT;
- }
- Logger.d(TAG, "hide navi setMapCenterPointByScene: " + scene);
- MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, scene);
- checkCameraModePosition(true);
- }
-
- private void checkCameraModePosition(boolean isNeedClone) {
- if (isNeedClone) {
- constraintSet.clone(topMotionLayout);
- }
- if (naviBg.getVisibility() == View.VISIBLE) {
- constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP, naviBg.getId(),
- ConstraintSet.BOTTOM, (int) getDimen(R.dimen.dp_30));
- } else {
- if (isTopViewOut) {
- constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP, naviBg.getId(),
- ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.module_ext_north_goneMarginTop));
- } else {
- constraintSet.connect(cameraMode.getId(), ConstraintSet.TOP,
- R.id.module_entrance_id_top_container_no_linkage,
- ConstraintSet.BOTTOM,
- (int) getDimen(R.dimen.dp_30));
- }
- }
- if (isNeedClone) {
- constraintSet.applyTo(topMotionLayout);
- }
- }
-
private float getDimen(int resId) {
return (int) topMotionLayout.getContext().getResources().getDimensionPixelSize(resId);
}
- private int computeNaviMarginTop(int height) {
- int result = (int) (height - (getDimen(R.dimen.module_ext_top_over_navi_height)) - getDimen(R.dimen.module_common_shadow_width_pos));
- Logger.d(TAG, "computeNaviMarginTop: " + height + " result: " + result);
- return result;
- }
-
interface OnTopViewAnimSimpleListener {
void onAnimStart();
@@ -496,17 +235,6 @@ public class TopViewNoLinkageAnimHelper {
return viewCaches.contains(view);
}
- private void setNaviVisibility(int visibility) {
- ivTurnIcon.setVisibility(visibility);
- tvNextRoad.setVisibility(visibility);
- tvNextDistance.setVisibility(visibility);
- remainTimeGroup.setVisibility(visibility);
- remainDistanceGroup.setVisibility(visibility);
- arriveTimeGroup.setVisibility(visibility);
- naviBg.setVisibility(visibility);
- tvNextDistanceUnit.setVisibility(visibility);
- tvTurnInfo.setVisibility(visibility);
- }
public void removeAllView() {
Logger.d(TAG, "remove all view");
@@ -522,24 +250,12 @@ public class TopViewNoLinkageAnimHelper {
}
}
topContainerNoLinkage.removeAllViews();
- hideNaviView();
MapCenterPointStrategy.setMapCenterPointByScene(mogoMapUIController, Scene.AIMLESS);
}
public void clear() {
topMotionLayout = null;
- remainTimeGroup = null;
- remainDistanceGroup = null;
- arriveTimeGroup = null;
- naviBg = null;
- ivTurnIcon = null;
- tvNextDistance = null;
- tvNextRoad = null;
- tvNextDistanceUnit = null;
- tvTurnInfo = null;
topContainerNoLinkage = null;
- cameraMode = null;
- transition = null;
}
public void enterVrMode(){
@@ -551,4 +267,46 @@ public class TopViewNoLinkageAnimHelper {
removeAllView();
topContainerNoLinkage.getLayoutParams().width = LayoutParams.MATCH_PARENT;
}
+
+ private final Animator.AnimatorListener mainAnimListener = new Animator.AnimatorListener() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ Logger.d(TAG, "onMainAnimEnd: " + currentAnimatingView);
+ IMogoTopViewStatusListener listener;
+ if (isTopViewOut) {
+ int lastCount = topContainerNoLinkage.getChildCount();
+ for (int i = 0; i < lastCount; i++) {
+ View child = topContainerNoLinkage.getChildAt(i);
+ viewCaches.remove(child);
+ listener = statusListenerMap.remove(child);
+ if (listener != null) {
+ listener.onViewRemoved(child);
+ }
+ }
+ topContainerNoLinkage.removeAllViews();
+ currentAnimatingView = null;
+ } else {
+ listener = statusListenerMap.get(currentAnimatingView);
+ if (listener != null) {
+ listener.onViewAdded(currentAnimatingView);
+ }
+ }
+
+ }
+
+ @Override
+ public void onAnimationCancel(Animator animation) {
+
+ }
+
+ @Override
+ public void onAnimationRepeat(Animator animation) {
+
+ }
+ };
}
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TrafficLightPanelManager.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TrafficLightPanelManager.java
deleted file mode 100644
index 1087cafce2..0000000000
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TrafficLightPanelManager.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package com.mogo.module.extensions.utils;
-
-import android.os.Handler;
-import android.os.Message;
-import android.view.View;
-import android.widget.TextView;
-
-import androidx.constraintlayout.widget.Group;
-
-import com.mogo.module.extensions.R;
-import com.mogo.module.extensions.view.VerticalTrafficLightView;
-import com.mogo.utils.logger.Logger;
-
-import java.util.Random;
-
-/**
- * 红绿灯面板管理类,控制各部分显示隐藏,同时控制限速、车速、红绿灯信息展示
- *
- * 导航信息内容通过{@link com.mogo.module.extensions.navi.VrModeNavInfoView} 在{@link com.mogo.module.extensions.entrance.EntranceFragment}进行控制
- * 此处仅控制导航信息的显示与隐藏
- *
- * @author tongchenfei
- */
-public class TrafficLightPanelManager implements Handler.Callback, View.OnClickListener {
- private static final String TAG = "TrafficLightPanelManager";
-
- private TrafficLightPanelManager() {
- }
-
- private final static TrafficLightPanelManager INSTANCE = new TrafficLightPanelManager();
-
- public static TrafficLightPanelManager getInstance() {
- return INSTANCE;
- }
-
- private Group speedGroup, navGroup, extraGroup;
- private TextView tvLimitSpeed;
- private VerticalTrafficLightView turnAroundLight, turnLeftLight, straightLight, turnRightLight;
-
- private Handler handler = new Handler(this);
-
- private boolean isInit = false;
-
- public void initPanel(View root) {
- speedGroup = root.findViewById(R.id.module_ext_id_group_navi_in_vr_speed);
- navGroup = root.findViewById(R.id.module_ext_id_group_navi_in_vr_nav_info);
- extraGroup = root.findViewById(R.id.module_ext_id_group_traffic_light_panel_extra);
- tvLimitSpeed = root.findViewById(R.id.module_ext_id_tv_limit_speed);
- turnAroundLight = root.findViewById(R.id.module_ext_id_traffic_light_turn_around);
- turnLeftLight = root.findViewById(R.id.module_ext_id_traffic_light_turn_left);
- straightLight = root.findViewById(R.id.module_ext_id_traffic_light_straight);
- turnRightLight = root.findViewById(R.id.module_ext_id_traffic_light_turn_right);
- isInit = true;
-
- // debug
- root.findViewById(R.id.module_ext_id_navi_in_vr_speed_bg).setOnClickListener(this);
- root.findViewById(R.id.module_ext_id_navi_in_vr_traffic_bg).setOnClickListener(this);
- }
-
- public void showNavPanel() {
- if (!isInit) {
- Logger.e(TAG, "nav panel 未初始化");
- return;
- }
- extraGroup.setVisibility(View.VISIBLE);
- if (isNav) {
- navGroup.setVisibility(View.VISIBLE);
- speedGroup.setVisibility(View.GONE);
- } else {
- speedGroup.setVisibility(View.VISIBLE);
- navGroup.setVisibility(View.GONE);
- }
- tvLimitSpeed.setVisibility(View.VISIBLE);
- }
-
- public void hideNavPanel() {
- if (!isInit) {
- Logger.e(TAG, "nav panel 未初始化");
- return;
- }
- extraGroup.setVisibility(View.GONE);
- speedGroup.setVisibility(View.GONE);
- tvLimitSpeed.setVisibility(View.GONE);
-
- }
-
- private boolean isNav = false;
-
- public void startNav() {
- isNav = true;
- navGroup.setVisibility(View.VISIBLE);
- speedGroup.setVisibility(View.GONE);
- }
-
- public void stopNav() {
- isNav = false;
- speedGroup.setVisibility(View.VISIBLE);
- navGroup.setVisibility(View.GONE);
- }
-
- public void refreshLimitSpeed(int limitSpeed) {
- handler.removeMessages(MSG_HIDE_LIMIT_SPEED);
- tvLimitSpeed.setVisibility(View.VISIBLE);
- tvLimitSpeed.setText(String.valueOf(limitSpeed));
- handler.sendEmptyMessageDelayed(MSG_HIDE_LIMIT_SPEED, HIDE_LIMIT_SPEED_DELAY);
- }
-
- /**
- * 刷新红绿灯显示状态
- *
- * @param laneLight 固定数组长度为4的车道类型灯,从0-3依次代表 掉头,左转,执行,右转
- * @param surplusTime 固定数组长度为4的剩余时长数组,从0-3依次代表 掉头,左转,执行,右转
- */
- public void refreshTrafficLightStatus(int[] laneLight, String[] surplusTime) {
- turnAroundLight.setTrafficLightStatus(laneLight[0], surplusTime[0]);
- turnLeftLight.setTrafficLightStatus(laneLight[1], surplusTime[1]);
- straightLight.setTrafficLightStatus(laneLight[2], surplusTime[2]);
- turnRightLight.setTrafficLightStatus(laneLight[3], surplusTime[3]);
- }
-
- public void release() {
- isInit = false;
- speedGroup = null;
- navGroup = null;
- extraGroup = null;
- tvLimitSpeed = null;
- turnAroundLight = null;
- turnLeftLight = null;
- straightLight = null;
- turnRightLight = null;
- }
-
- private static final int MSG_HIDE_LIMIT_SPEED = 1001;
- private static final long HIDE_LIMIT_SPEED_DELAY = 5000;
-
- @Override
- public boolean handleMessage(Message msg) {
- if (!isInit) {
- return false;
- }
- if (msg.what == MSG_HIDE_LIMIT_SPEED) {
- tvLimitSpeed.setVisibility(View.GONE);
- return true;
- }
- return false;
- }
-
- @Override
- public void onClick(View v) {
- if (v.getId() == R.id.module_ext_id_navi_in_vr_speed_bg) {
- boolean s = new Random().nextBoolean();
- boolean b = new Random().nextBoolean();
- if (s) {
- if (b) {
- startNav();
- } else {
- stopNav();
- }
- } else {
- refreshLimitSpeed(90);
- }
- } else {
- int[] color = new int[4];
- String[] time = new String[4];
- for (int i = 0; i < 4; i++) {
- int s = new Random().nextInt(4);
- boolean b = new Random().nextBoolean();
- color[i] = s;
- time[i] = b ? "12" : "";
- }
- refreshTrafficLightStatus(color, time);
- }
-
- }
-}
diff --git a/modules/mogo-module-extensions/src/main/res/layout/camera_item_v2x_live_video.xml b/modules/mogo-module-extensions/src/main/res/layout/camera_item_v2x_live_video.xml
index da246758f3..975ae57197 100644
--- a/modules/mogo-module-extensions/src/main/res/layout/camera_item_v2x_live_video.xml
+++ b/modules/mogo-module-extensions/src/main/res/layout/camera_item_v2x_live_video.xml
@@ -10,10 +10,9 @@
@@ -32,6 +31,6 @@
app:miv_placeHolder="@drawable/icon_default_user_head"
app:miv_shape="circle"
app:miv_shapeBorderWidth="@dimen/dp_4"
- tools:visibility="visible" />
+ tools:visibility="invisible" />
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/layout/camera_push_live_video.xml b/modules/mogo-module-extensions/src/main/res/layout/camera_push_live_video.xml
index a444b15a4a..56e9b73045 100644
--- a/modules/mogo-module-extensions/src/main/res/layout/camera_push_live_video.xml
+++ b/modules/mogo-module-extensions/src/main/res/layout/camera_push_live_video.xml
@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/rlRoadEventDetail"
android:layout_width="match_parent"
- android:layout_height="@dimen/v2x_video_window_height_content"
+ android:layout_height="@dimen/module_video_window_height_content"
android:clipToPadding="false">
diff --git a/modules/mogo-module-extensions/src/main/res/layout/include_navi_info_panle.xml b/modules/mogo-module-extensions/src/main/res/layout/include_navi_info_panle.xml
index 1c0bebfa10..efa55e9992 100644
--- a/modules/mogo-module-extensions/src/main/res/layout/include_navi_info_panle.xml
+++ b/modules/mogo-module-extensions/src/main/res/layout/include_navi_info_panle.xml
@@ -14,8 +14,8 @@
android:layout_marginLeft="@dimen/module_common_shadow_width_pos"
android:layout_marginRight="@dimen/module_common_shadow_width_pos"
android:layout_marginTop="@dimen/module_common_shadow_width_pos"
- app:layout_constraintLeft_toLeftOf="@id/module_entrance_id_top_container"
- app:layout_constraintTop_toTopOf="@id/module_entrance_id_top_motion_layout" />
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/layout/include_navi_info_panle_has_top.xml b/modules/mogo-module-extensions/src/main/res/layout/include_navi_info_panle_has_top.xml
new file mode 100644
index 0000000000..94a2d56326
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/layout/include_navi_info_panle_has_top.xml
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml
index de35c28104..b1610caf4c 100644
--- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml
+++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml
@@ -16,10 +16,13 @@
android:layout_width="match_parent"
android:layout_height="wrap_content" />
-
+
-
+ android:layout_height="wrap_content"
+ android:id="@+id/module_ext_id_anim_nav_info"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ android:visibility="gone"
+ tools:visibility="visible"/>
-
-
-
+ android:layout_height="wrap_content"
+ android:id="@+id/module_ext_id_anim_nav_info"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ android:visibility="gone"/>
0px
-6px
20px
- 370px
+ 300px
+ 400px
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/values-mdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-mdpi/dimens.xml
index 286f0b120f..b268db611b 100644
--- a/modules/mogo-module-extensions/src/main/res/values-mdpi/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values-mdpi/dimens.xml
@@ -14,6 +14,6 @@
-1
0px
20px
- 370px
-
+ 300px
+ 400px
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi-1920x1000/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi-1920x1000/dimens.xml
index 9d0821625b..ca06e7f314 100644
--- a/modules/mogo-module-extensions/src/main/res/values-xhdpi-1920x1000/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi-1920x1000/dimens.xml
@@ -161,5 +161,6 @@
0px
36px
- 664px
+ 393px
+ 700px
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
index f35e24782f..ca44fd8dcb 100644
--- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
@@ -178,6 +178,7 @@
20px
36px
- 664px
+ 393px
+ 700px
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/values/dimens.xml b/modules/mogo-module-extensions/src/main/res/values/dimens.xml
index 173e3fb522..30d6518fb6 100644
--- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml
@@ -238,7 +238,8 @@
36px
21px
21px
+ 400px
+ 300px
- 370px
\ No newline at end of file
diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java
index c3f8748bea..1959a9947e 100644
--- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java
+++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/window/MediaWindow2.java
@@ -122,6 +122,10 @@ public class MediaWindow2 implements IMusicView , IMogoStatusChangedListener {
}
if (descriptor == StatusDescriptor.VR_MODE) {
+ if (mWindowView == null) {
+ return;
+ }
+
ServiceMediaHandler.getMogoWindowManager().removeView(mWindowView);
mHasAddWindow = false;
addWindowView();
diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/IMogoSmallMapProvider.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/IMogoSmallMapProvider.java
deleted file mode 100644
index cb8cb65fe0..0000000000
--- a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/IMogoSmallMapProvider.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.mogo.module.small.map;
-
-import com.mogo.service.module.IMogoModuleProvider;
-
-/**
- * @author donghongyu
- * @date 12/10/20 1:36 PM
- */
-public interface IMogoSmallMapProvider extends IMogoModuleProvider {
- String path = "/small_map/api";
-
-}
diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDirectionView.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDirectionView.java
new file mode 100644
index 0000000000..14a2a62ad1
--- /dev/null
+++ b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDirectionView.java
@@ -0,0 +1,64 @@
+package com.mogo.module.small.map;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.animation.Animation;
+import android.view.animation.DecelerateInterpolator;
+import android.view.animation.RotateAnimation;
+import android.widget.ImageView;
+
+import androidx.annotation.Nullable;
+
+import com.mogo.module.common.view.RoundLayout;
+
+/**
+ * 小地图的方向View
+ *
+ * @author donghongyu
+ * @date 12/14/20 4:40 PM
+ */
+public class SmallMapDirectionView extends RoundLayout {
+
+ private ImageView mIvMapBorder;
+
+ public SmallMapDirectionView(Context context) {
+ this(context, null);
+ }
+
+ public SmallMapDirectionView(Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public SmallMapDirectionView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView(context);
+ }
+
+ private void initView(Context context) {
+ LayoutInflater.from(context).inflate(R.layout.module_small_map_view, this);
+ mIvMapBorder = findViewById(R.id.ivMapBorder);
+ }
+
+
+ /**
+ * 修改角度
+ *
+ * @param angle 角度 0 - 359度旋转,相对于自身中心位置
+ */
+ public void changeAngle(int angle) {
+ Animation mRotateAnimation = new RotateAnimation(
+ 0, angle,
+ Animation.RELATIVE_TO_SELF, 0.5f,
+ Animation.RELATIVE_TO_SELF, 0.5f);
+ //设置线性插值,可以解决旋转一圈后卡顿问题
+ mRotateAnimation.setInterpolator(new DecelerateInterpolator());
+ //设置旋转一圈时间
+ mRotateAnimation.setDuration(1000);
+ //控件动画结束时是否保持动画最后的状态
+ mRotateAnimation.setFillAfter(true);
+
+ mIvMapBorder.startAnimation(mRotateAnimation);
+ }
+
+}
diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapService.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapService.java
index e4a4336d9c..881efae6c5 100644
--- a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapService.java
+++ b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapService.java
@@ -24,7 +24,7 @@ public class SmallMapService extends Service {
private IBinder mBinder;
private WindowManagerView mWindowManagerView;
- private SmallMapView mMapView;
+ private SmallMapDirectionView mSmallMapDirectionView;
@Override
public void onCreate() {
@@ -69,20 +69,30 @@ public class SmallMapService extends Service {
private void addMachineVisionMapView() {
Logger.d(TAG, "addMachineVisionMapView");
+
mWindowManagerView = new WindowManagerView.Builder(getApplicationContext())
- .contentView(R.layout.module_small_map_view)
+ .contentView(R.layout.module_small_map_direction_view)
.size(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT
)
.position(
- getResources().getDimensionPixelOffset( R.dimen.module_mvision_view_x ),
- getResources().getDimensionPixelOffset( R.dimen.module_mvision_view_y )
+ getResources().getDimensionPixelOffset(R.dimen.module_mvision_view_x),
+ getResources().getDimensionPixelOffset(R.dimen.module_mvision_view_y)
)
.gravity(Gravity.TOP | Gravity.LEFT)
.showInWindowManager();
mWindowManagerView.show();
+ mSmallMapDirectionView = mWindowManagerView.findViewById(R.id.smallMapDirectionView);
+
+
+ mSmallMapDirectionView.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ mSmallMapDirectionView.changeAngle(-60);
+ }
+ }, 1000);
}
diff --git a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java
index 3bbdee2b65..0e3a5be274 100644
--- a/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java
+++ b/modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallVisionProvider.java
@@ -11,17 +11,23 @@ import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.commons.AbsMogoApplication;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.service.MogoServicePaths;
+import com.mogo.service.map.IMogoSmallMapProvider;
import com.mogo.service.module.ModuleType;
+import com.mogo.service.statusmanager.IMogoStatusChangedListener;
+import com.mogo.service.statusmanager.StatusDescriptor;
/**
* @author donghongyu
* @date 12/10/20 1:34 PM
*/
-@Route(path = IMogoSmallMapProvider.path)
-public class SmallVisionProvider implements IMogoSmallMapProvider {
+@Route(path = MogoServicePaths.PATH_SMALL_MAP)
+public class SmallVisionProvider implements IMogoSmallMapProvider, IMogoStatusChangedListener {
private final String TAG = "SmallVisionProvider";
private Intent mSmallMapServiceIntent;
+ private Context mContext;
@Override
public Fragment createFragment(Context context, Bundle data) {
@@ -47,15 +53,55 @@ public class SmallVisionProvider implements IMogoSmallMapProvider {
@Override
public void init(Context context) {
Log.d(TAG, "小地图模块初始化……");
- mSmallMapServiceIntent = new Intent(context, SmallMapService.class);
- context.startService(mSmallMapServiceIntent);
+ mContext = context;
+
+ MogoApisHandler.getInstance()
+ .getApis()
+ .getStatusManagerApi()
+ .registerStatusChangedListener(
+ MogoServicePaths.PATH_SMALL_MAP,
+ StatusDescriptor.VR_MODE,
+ this);
}
@Override
public void onDestroy() {
Log.d(TAG, "小地图模块销毁……");
+ hidePanel();
+ }
+
+ @Override
+ public void showPanel() {
+ Log.d(TAG, "小地图模块触发展示……");
+
+ mSmallMapServiceIntent = new Intent(mContext, SmallMapService.class);
+ mContext.startService(mSmallMapServiceIntent);
+ }
+
+ @Override
+ public void hidePanel() {
+ Log.d(TAG, "小地图模块触发隐藏……");
+
if (mSmallMapServiceIntent != null) {
AbsMogoApplication.getApp().stopService(mSmallMapServiceIntent);
}
}
+
+ @Override
+ public void changeAngle(double angle) {
+
+ }
+
+ @Override
+ public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) {
+ Log.d(TAG, "onStatusChanged……descriptor=" + descriptor + ",isTrue=" + isTrue);
+
+ if (descriptor == StatusDescriptor.VR_MODE) {
+ if (isTrue) {
+ showPanel();
+ } else {
+ hidePanel();
+ }
+ }
+ }
}
diff --git a/modules/mogo-module-smp/src/main/res/layout/module_small_map_direction_view.xml b/modules/mogo-module-smp/src/main/res/layout/module_small_map_direction_view.xml
new file mode 100644
index 0000000000..dfd4d52a64
--- /dev/null
+++ b/modules/mogo-module-smp/src/main/res/layout/module_small_map_direction_view.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml b/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml
index a787adfc60..e5d1dbfe79 100644
--- a/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml
+++ b/modules/mogo-module-smp/src/main/res/layout/module_small_map_view.xml
@@ -1,17 +1,16 @@
-
+ android:src="@drawable/module_small_map_view_border" />
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XShareEventAdapter.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XShareEventAdapter.java
index 665b08f9f5..ead28acbda 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XShareEventAdapter.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XShareEventAdapter.java
@@ -76,55 +76,60 @@ public class V2XShareEventAdapter extends RecyclerView.Adapter position) {
- V2XShareEventDescription.ResultBean.EnthusiasmIndexBean data = (V2XShareEventDescription.ResultBean.EnthusiasmIndexBean) dataArrayList.get(position);
- if (data != null) {
- String shareNum = String.valueOf(data.getShareNum());
- String likeNum = String.valueOf(data.getLikeNum());
- double enthusiasmIndex = data.getEnthusiasmIndex() <= 5 ? data.getEnthusiasmIndex() : 5;
- if (shareNum != null) {
- ((shareDescriptionViewHolder) holder).shareNumTextView.setText(shareNum);
- }
- if (likeNum != null) {
- ((shareDescriptionViewHolder) holder).approveNumTextView.setText(likeNum);
- }
- ((shareDescriptionViewHolder) holder).ratingBar.setRating((float) enthusiasmIndex);
- }
- }
- } else if (holder instanceof shareItemViewHolder) {
- //分享列表
- if (dataArrayList.size() > position) {
- V2XShareEventItem.ResultBean.PageBean.ContentBean data = (V2XShareEventItem.ResultBean.PageBean.ContentBean) dataArrayList.get(position);
- if (data != null) {
- String poitype = data.getPoiType();
- String address = data.getUploadAddress();
- String time = DateTimeUtils.getTimeText(data.getUploadTimestamp(), DateTimeUtils.MM_Yue_dd_Ri_HH_mm);
- String likeNum = String.valueOf(data.getLikeNum());
- String notLikeNum = String.valueOf(data.getNotlikeNum());
- if (poitype != null) {
- ((shareItemViewHolder) holder).caseStyleTextView.setText(EventTypeUtils.getPoiTypeStr(poitype));
- ((shareItemViewHolder) holder).caseStyleTextView.setBackgroundResource(EventTypeUtils.getPoiTypeBgForShareItem(poitype));
-
- }
- if (address != null) {
- ((shareItemViewHolder) holder).caseAddressTextView.setText(address);
- }
- if (time != null) {
- ((shareItemViewHolder) holder).caseTimeTextView.setText(time);
- }
- if (likeNum != null) {
- ((shareItemViewHolder) holder).caseUsefulTextView.setText(likeNum);
- }
- if (notLikeNum != null) {
- ((shareItemViewHolder) holder).caseUselessTextView.setText(notLikeNum);
+ if (holder instanceof shareDescriptionViewHolder) {
+ //分享次数,车友认同次数,热心指数
+ if (dataArrayList.size() > position) {
+ V2XShareEventDescription.ResultBean.EnthusiasmIndexBean data = (V2XShareEventDescription.ResultBean.EnthusiasmIndexBean) dataArrayList.get(position);
+ if (data != null) {
+ String shareNum = String.valueOf(data.getShareNum());
+ String likeNum = String.valueOf(data.getLikeNum());
+ double enthusiasmIndex = data.getEnthusiasmIndex() <= 5 ? data.getEnthusiasmIndex() : 5;
+ if (shareNum != null) {
+ ((shareDescriptionViewHolder) holder).shareNumTextView.setText(shareNum);
+ }
+ if (likeNum != null) {
+ ((shareDescriptionViewHolder) holder).approveNumTextView.setText(likeNum);
+ }
+ ((shareDescriptionViewHolder) holder).ratingBar.setRating((float) enthusiasmIndex);
}
}
+ } else if (holder instanceof shareItemViewHolder) {
+ //分享列表
+ if (dataArrayList.size() > position) {
+ V2XShareEventItem.ResultBean.PageBean.ContentBean data = (V2XShareEventItem.ResultBean.PageBean.ContentBean) dataArrayList.get(position);
+ if (data != null) {
+ String poitype = data.getPoiType();
+ String address = data.getUploadAddress();
+ String time = DateTimeUtils.getTimeText(data.getUploadTimestamp(), DateTimeUtils.MM_Yue_dd_Ri_HH_mm);
+ String likeNum = String.valueOf(data.getLikeNum());
+ String notLikeNum = String.valueOf(data.getNotlikeNum());
+ if (poitype != null) {
+ ((shareItemViewHolder) holder).caseStyleTextView.setText(EventTypeUtils.getPoiTypeStr(poitype));
+ ((shareItemViewHolder) holder).caseStyleTextView.setBackgroundResource(EventTypeUtils.getPoiTypeBgForShareItem(poitype));
+
+ }
+ if (address != null) {
+ ((shareItemViewHolder) holder).caseAddressTextView.setText(address);
+ }
+ if (time != null) {
+ ((shareItemViewHolder) holder).caseTimeTextView.setText(time);
+ }
+ if (likeNum != null) {
+ ((shareItemViewHolder) holder).caseUsefulTextView.setText(likeNum);
+ }
+ if (notLikeNum != null) {
+ ((shareItemViewHolder) holder).caseUselessTextView.setText(notLikeNum);
+ }
+ }
+
+ }
}
+ } catch (Exception e) {
+
}
}
@@ -143,7 +148,7 @@ public class V2XShareEventAdapter extends RecyclerView.Adapter {
mExploreWay.getPoiType(),
2);
}
- delayedCloseWindow();
+ if (!V2XServiceManager.getMoGoStatusManager().isVrMode()) {
+ delayedCloseWindow();
+ } else {
+ mIlIllegalParkingLike.setClickable(false);
+ }
}
/**
@@ -142,6 +149,10 @@ public class V2XIllegalParkVH extends V2XBaseViewHolder {
mExploreWay.getPoiType(),
3);
}
- delayedCloseWindow();
+ if (!V2XServiceManager.getMoGoStatusManager().isVrMode()) {
+ delayedCloseWindow();
+ } else {
+ mIIllegalParkingUnLike.setClickable(false);
+ }
}
}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/entity/panel/V2XShareEventItemEnum.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/entity/panel/V2XShareEventItemEnum.java
index 0436a54c83..068a5369dc 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/entity/panel/V2XShareEventItemEnum.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/entity/panel/V2XShareEventItemEnum.java
@@ -7,5 +7,6 @@ public interface V2XShareEventItemEnum {
int ITEM_TYPE_SHARE_EMPTY = 2;
int ITEM_TYPE_LOAD_MORE_STATUS = 3;
int ITEM_TYPE_NO_MORE = 4;
+ int ITEM_TYPE_OTHER = 5;
}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/OptimalSpeedMarker.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/OptimalSpeedMarker.java
index 8554d90316..d5268ab6c6 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/OptimalSpeedMarker.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/OptimalSpeedMarker.java
@@ -26,7 +26,9 @@ class OptimalSpeedMarker implements IV2XMarker {
.latitude(entity.getLat())
.longitude(entity.getLon()).anchor(0.5f,0.9f).icon( ViewUtils.fromView(new OptimalSpeedMarkerView(V2XServiceManager.getContext())));
optimalMarker = V2XServiceManager.getMarkerManager().addMarker(V2X_OPTIMAL_SPEED_MARKER, optionsRipple);
- optimalMarker.setClickable(false);
+ if (optimalMarker != null) {
+ optimalMarker.setClickable(false);
+ }
}
@Override
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java
index a39d5056bc..7777ae5c59 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java
@@ -3,6 +3,7 @@ package com.mogo.module.v2x.scenario.scene.test;
import android.content.Context;
import android.content.Intent;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
@@ -257,6 +258,7 @@ public class V2XTestConsoleWindow extends ConstraintLayout {
});
mBtnTriggerParkEvent.setOnClickListener(v -> {
+ Log.d("触发违章停车事件", "00");
V2XMessageEntity> v2XMessageEntity =
TestOnLineCarUtils.getV2XIllegalParkData();
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/HeartUnLikeView.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/HeartUnLikeView.java
index b361791431..9d7d45c720 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/HeartUnLikeView.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/HeartUnLikeView.java
@@ -5,7 +5,10 @@ import android.animation.AnimatorInflater;
import android.animation.AnimatorSet;
import android.content.Context;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.View;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -26,6 +29,7 @@ public class HeartUnLikeView extends LinearLayout implements Animator.AnimatorLi
private AnimatorSet mAnimatorSet;
private OnClickCallListener mOnClickCallListener;
private boolean isAnimator = false;
+ private ImageView animationImageView;
public HeartUnLikeView(Context context) {
this(context, null);
@@ -39,7 +43,7 @@ public class HeartUnLikeView extends LinearLayout implements Animator.AnimatorLi
super(context, attrs, defStyleAttr);
inflate(context, V2XServiceManager.getMoGoStatusManager().isVrMode() ? R.layout.view_heart_unlike_vr : R.layout.view_heart_unlike, this);
mIllegalParkingUnLike = findViewById(R.id.ivIllegalParkingUnLike);
-
+ animationImageView = findViewById(R.id.animationImage);
setOnClickListener(v -> {
if (!isAnimator) {
isAnimator = true;
@@ -53,6 +57,12 @@ public class HeartUnLikeView extends LinearLayout implements Animator.AnimatorLi
}
mAnimatorSet.start();
}
+ if (V2XServiceManager.getMoGoStatusManager().isVrMode()) {
+ animationImageView.setVisibility(View.VISIBLE);
+ Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.v2x_unlike_heart_scale_ani_vr);
+ animationImageView.startAnimation(animation);
+ animationImageView.setVisibility(View.GONE);
+ }
});
}
diff --git a/modules/mogo-module-v2x/src/main/res/anim/v2x_unlike_heart_scale_ani_vr.xml b/modules/mogo-module-v2x/src/main/res/anim/v2x_unlike_heart_scale_ani_vr.xml
new file mode 100644
index 0000000000..383effa7da
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/anim/v2x_unlike_heart_scale_ani_vr.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_unlike_animation_vr.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_unlike_animation_vr.png
index e14d0188cb..41390407d8 100644
Binary files a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_unlike_animation_vr.png and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_unlike_animation_vr.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_illegal_parking_vr.xml b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_illegal_parking_vr.xml
index 837cf017c1..d3d0683aab 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_illegal_parking_vr.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_illegal_parking_vr.xml
@@ -6,16 +6,17 @@
android:layout_width="match_parent"
android:layout_height="@dimen/dp_120"
android:background="@drawable/v2x_bg_pop_up"
+ android:layout_marginTop="@dimen/dp_8"
android:paddingEnd="@dimen/dp_62">
+ app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="@+id/leftImageView" />
-
-
+
+
+
diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_road_event_detail_vr.xml b/modules/mogo-module-v2x/src/main/res/layout/window_road_event_detail_vr.xml
index 855714528d..e3f3c2d6c6 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/window_road_event_detail_vr.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/window_road_event_detail_vr.xml
@@ -3,7 +3,8 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="wrap_content">
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/dp_8">