[清扫车]右下角人工驾驶小地图布局搭建

This commit is contained in:
bxb
2023-01-19 15:11:34 +08:00
parent 655a92f8e0
commit 363a7da7c6
8 changed files with 360 additions and 5 deletions

View File

@@ -51,7 +51,7 @@ dependencies {
implementation rootProject.ext.dependencies.rxjava
implementation rootProject.ext.dependencies.rxandroid
implementation rootProject.ext.dependencies.androidxcardview
implementation project(":OCH:mogo-och-common-module")
implementation rootProject.ext.dependencies.androidxrecyclerview

View File

@@ -15,6 +15,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListener
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager;
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.call.map.CallerSmpManager;
import com.mogo.eagle.core.utilcode.mogo.view.OnPreventFastClickListener;
import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.listener.MogoMapListenerHandler;
@@ -29,6 +30,8 @@ import com.mogo.och.sweeper.view.SweeperTrafficDataView;
import com.mogo.och.sweeper.view.SweeperWorkModeView;
import androidx.constraintlayout.widget.Group;
import androidx.fragment.app.FragmentTransaction;
/**
* 网约车基础Fragment主要负责布局通用界面处理站点面板和通话面板互斥情况
* <p>
@@ -52,7 +55,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
private FrameLayout flTaskListPanelContainer;
private Group groupTestPanel;
//清扫车车辆基本信息 速度 档位 转向灯 红绿灯等
private SweeperTrafficDataView mTrafficDataView;
private SweeperTrafficDataView mTrafficDataView;
//清扫车模式展示
private SweeperWorkModeView mClWorkMode;
//清扫车模式选择面板
@@ -61,6 +64,12 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
private SweeperTaskMenuView mTaskMenu;
//当前任务面板
private SweeperCurrentTaskInfoView mCurrentTaskView;
//人工驾驶地图Fragment
private SweeperAmapNaviFragment mOchAmapNaviFragment;
//关闭人工驾驶小地图
private ImageView mCloseNavIcon;
//人工驾驶地图View
private FrameLayout mFlNaviPanelContainer;
public static final String TYPE_ENTRANCE = "entrance";
public boolean isAnimateRunning = false;
@@ -87,7 +96,10 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
mSettingBtn = findViewById(R.id.module_mogo_och_setting_layout);
mBadcaseBtn = findViewById(R.id.module_mogo_och_badcase_rl);
mAICollectBtn = findViewById(R.id.module_mogo_och_ai_collet_rl);
mCloseNavIcon = findViewById(R.id.sweeper_close_navi_icon);
mFlNaviPanelContainer = findViewById(R.id.module_mogo_och_navi_panel_container);
initListener();
hideEagleConfig();
//设置左下角四个按钮监听事件
setBottomBtnListener();
// 模拟 不可自动驾驶目前场景是刚开机adas还未和工控机连接
@@ -104,11 +116,12 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
findViewById(R.id.btnAutopilotRunning).setOnClickListener(view ->
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING)
);
showAmapNaviToStationFragment(true);
}
private void updateSwitchMapIcon() {
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (controller!=null){
if (controller != null) {
if (controller.getCurrentMapVisualAngle().isLongSight()) {
mSwitchMapModeImage.setImageResource(R.drawable.sweeper_switch_map_long);
} else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
@@ -154,9 +167,9 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
* @return
*/
public void setTaskListPanelView(boolean isShow) {
if (isShow){
if (isShow) {
panelView.setVisibility(View.VISIBLE);
}else{
} else {
panelView.setVisibility(View.GONE);
}
}
@@ -178,6 +191,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
public SweeperCurrentTaskInfoView getCurrentTaskPanelView() {
return mCurrentTaskView;
}
/**
* 获取菜单view
*
@@ -186,6 +200,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
public View getTaskMenuView() {
return mTaskMenu;
}
/**
* 清扫车任务列表面板view在{@link #initViews()}时候添加到container中
*
@@ -298,4 +313,33 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
}
}
/**
* 隐藏鹰眼原有控件
*/
private void hideEagleConfig() {
//隐藏小地图
CallerSmpManager.INSTANCE.hidePanel();
}
/**
* 人工驾驶地图导航
*
* @param isShow
*/
protected void showAmapNaviToStationFragment(boolean isShow) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
if (isShow) {
mOchAmapNaviFragment = SweeperAmapNaviFragment.newInstance();
if (mOchAmapNaviFragment.isAdded()) {
return;
}
transaction.add(R.id.module_mogo_och_navi_panel_container, mOchAmapNaviFragment).show(mOchAmapNaviFragment);
transaction.commitAllowingStateLoss();
mCloseNavIcon.setVisibility(View.VISIBLE);
mFlNaviPanelContainer.setVisibility(View.VISIBLE);
} else {
mCloseNavIcon.setVisibility(View.GONE);
mFlNaviPanelContainer.setVisibility(View.GONE);
}
}
}

View File

@@ -0,0 +1,50 @@
package com.mogo.och.sweeper.fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
/**
* @author: wangmingjun
* @date: 2021/9/9
*/
public abstract class BaseSweeperUIFragment extends Fragment {
private View mRootView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (mRootView == null) {
mRootView = inflater.inflate(getLayoutId(), container, false);
} else {
ViewGroup viewGroup = (ViewGroup) mRootView.getParent();
if (viewGroup != null) {
viewGroup.removeView(mRootView);
}
}
initViews(mRootView);
initViews(savedInstanceState);
return mRootView;
}
/**
* 布局资源
*
* @return
*/
protected abstract int getLayoutId();
protected abstract void initViews(View view);
protected void initViews(Bundle savedInstanceState) {
}
@Override
public void onDestroy() {
super.onDestroy();
mRootView = null;
}
}

View File

@@ -0,0 +1,217 @@
package com.mogo.och.sweeper.fragment;
import android.os.Bundle;
import android.view.View;
import com.amap.api.navi.AMapNaviViewListener;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.och.common.module.map.AmapNaviToDestinationModel;
import com.mogo.och.common.module.map.CommonAmapNaviVIew;
import com.mogo.och.common.module.map.ICommonNaviChangedCallback;
import com.mogo.och.sweeper.R;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI;
/**
* @author: wangmingjun
* @date: 2021/11/30
*/
public class SweeperAmapNaviFragment extends BaseSweeperUIFragment implements AMapNaviViewListener {
private CommonAmapNaviVIew mAMapNaviView;
private ICommonNaviChangedCallback mNaviToStartInfoCallback;
public static SweeperAmapNaviFragment newInstance() {
Bundle args = new Bundle();
SweeperAmapNaviFragment fragment = new SweeperAmapNaviFragment();
fragment.setArguments(args);
return fragment;
}
@Override
protected int getLayoutId() {
return R.layout.sweeper_amap_navi_view;
}
@Override
protected void initViews(View view) {
mAMapNaviView = view.findViewById(R.id.navi_view);
}
@Override
protected void initViews(Bundle savedInstanceState) {
super.initViews(savedInstanceState);
if (mAMapNaviView != null)
mAMapNaviView.onCreate(savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
if (mAMapNaviView != null)
mAMapNaviView.onResume();
}
@Override
public void onPause() {
super.onPause();
if (mAMapNaviView != null)
mAMapNaviView.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
AmapNaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(false);
if (mAMapNaviView != null){
mAMapNaviView.onDestroy();
}
if (mNaviToStartInfoCallback != null){
mNaviToStartInfoCallback = null;
}
}
@Override
public void onNaviSetting() {
//底部导航设置点击回调
}
@Override
public void onNaviCancel() {
}
@Override
public void onNaviMapMode(int naviMode) {
//导航态车头模式0:车头朝上状态1:正北朝上模式。
}
@Override
public void onNaviTurnClick() {
//转弯view的点击回调
}
@Override
public void onNextRoadClick() {
//下一个道路View点击回调
}
@Override
public void onScanViewButtonClick() {
//全览按钮点击回调
}
@Override
public void onLockMap(boolean isLock) {
//锁地图状态发生变化时回调
}
@Override
public void onNaviViewLoaded() {
CallerLogger.INSTANCE.d(M_TAXI + "wlx", "导航页面加载成功");
CallerLogger.INSTANCE.d(M_TAXI + "wlx", "请不要使用AMapNaviView.getMap().setOnMapLoadedListener();会overwrite导航SDK内部画线逻辑");
}
@Override
public void onMapTypeChanged(int i) {
}
@Override
public void onNaviViewShowMode(int i) {
}
@Override
public boolean onNaviBackClick() {
return false;
}
/**
* 车道信息说明:
* <p>
* 0xFF, 无对应车道
* 0, 直行
* 1, 左转
* 2, 直行+左转
* 3, 右转
* 4, 直行+右转
* 5, 左掉头
* 6, 左转+右转
* 7, 直行+左转+右转
* 8, 右掉头
* 9, 直行+左掉头
* 10, 直行+右掉头
* 11, 左转+左掉头
* 12, 右转+右掉头
* 13, 直行+扩展
* 14, 左转+左掉头+扩展
* 15, 保留
* 16, 直行+左转+左掉头
* 17, 右转+左掉头
* 18, 左转+右转+左掉头
* 19, 直行+右转+左掉头
* 20, 左转+右掉头
* 21, 公交车道
* 22, 空车道
* 23 可变车道
*/
String[] array = {
"直行车道"
, "左转车道"
, "左转或直行车道"
, "右转车道"
, "右转或直行车道"
, "左掉头车道"
, "左转或者右转车道"
, " 左转或右转或直行车道"
, "右转掉头车道"
, "直行或左转掉头车道"
, "直行或右转掉头车道"
, "左转或左掉头车道"
, "右转或右掉头车道"
, "直行并且车道扩展"
, "左转+左掉头+扩展"
, "不可以选择该车道"
, "直行+左转+左掉头车道"
, "右转+左掉头"
, "左转+右转+左掉头"
, "直行+右转+左掉头"
, "左转+右掉头"
, "公交车道"
, "空车道"
, "可变车道"
};
String[] actions = {
"直行"
, "左转"
, "左转或直行"
, "右转"
, "右转或这行"
, "左掉头"
, "左转或者右转"
, " 左转或右转或直行"
, "右转掉头"
, "直行或左转掉头"
, "直行或右转掉头"
, "左转或左掉头"
, "右转或右掉头"
, "直行并且车道扩展"
, "左转+左掉头+扩展"
, "不可以选择"
, "直行+左转+左掉头"
, "右转+左掉头"
, "左转+右转+左掉头"
, "直行+右转+左掉头"
, "左转+右掉头"
, "公交车道"
, "空车道"
, "可变车道"
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:cardBackgroundColor="@android:color/transparent"
app:cardCornerRadius="30dp"
app:cardElevation="8dp"
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true">
<com.mogo.och.common.module.map.CommonAmapNaviVIew
android:id="@+id/navi_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</androidx.cardview.widget.CardView>

View File

@@ -141,6 +141,34 @@
android:layout_gravity="center"
android:src="@drawable/ai_collect_selector" />
</FrameLayout>
<!--清扫手动驾驶路线导航-->
<FrameLayout
android:id="@+id/module_mogo_och_navi_panel_container"
android:layout_width="@dimen/dp_600"
android:layout_height="@dimen/dp_600"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<ImageView
android:id="@+id/sweeper_close_navi_icon"
android:layout_width="@dimen/dp_80"
android:layout_height="@dimen/dp_80"
android:visibility="gone"
android:src="@drawable/sweeper_close_navi_icon"
app:layout_constraintTop_toTopOf="@+id/module_mogo_och_navi_panel_container"
app:layout_constraintStart_toStartOf="@+id/module_mogo_och_navi_panel_container"
android:layout_marginTop="@dimen/dp_26"
android:layout_marginStart="@dimen/dp_24"
/>
<ImageView
android:id="@+id/sweeper_refresh_navi"
android:layout_width="@dimen/dp_80"
android:layout_height="@dimen/dp_80"
android:layout_marginTop="@dimen/dp_26"
android:layout_marginEnd="@dimen/dp_24"
app:layout_constraintTop_toTopOf="@+id/module_mogo_och_navi_panel_container"
app:layout_constraintEnd_toEndOf="@+id/module_mogo_och_navi_panel_container"
android:src="@drawable/sweeper_navi_refresh"
/>
<Button
android:id="@+id/btnAutopilotDisable"
android:layout_width="wrap_content"