diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 771c1f74d7..740794bd48 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -89,6 +89,7 @@
+
diff --git a/OCH/mogo-och-bus/build.gradle b/OCH/mogo-och-bus/build.gradle
index 2e4e685dd9..0cfd857606 100644
--- a/OCH/mogo-och-bus/build.gradle
+++ b/OCH/mogo-och-bus/build.gradle
@@ -44,6 +44,8 @@ dependencies {
implementation rootProject.ext.dependencies.rxjava
implementation rootProject.ext.dependencies.rxandroid
+ implementation rootProject.ext.dependencies.androidxrecyclerview
+
if (Boolean.valueOf(RELEASE)) {
implementation rootProject.ext.dependencies.mogooch
implementation rootProject.ext.dependencies.mogoutils
diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java
new file mode 100644
index 0000000000..59e6699b93
--- /dev/null
+++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java
@@ -0,0 +1,94 @@
+package com.mogo.och.bus.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.mogo.och.bus.R;
+import com.mogo.och.bus.bean.OchBusStation;
+import com.mogo.och.bus.constant.OchBusConst;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Station Panel 中的车站列表adapter
+ *
+ * @author tongchenfei
+ */
+public class OchBusStationAdapter extends RecyclerView.Adapter {
+
+ private final Context context;
+ private final List stationList = new ArrayList<>();
+ private int currentStation;
+
+ public OchBusStationAdapter(Context context) {
+ this.context = context;
+ }
+
+ public void refreshStationList(List stationList) {
+ this.stationList.clear();
+ this.stationList.addAll(stationList);
+ for (int i = 0; i < stationList.size(); i++) {
+ OchBusStation station = stationList.get(i);
+ if (station.getIsCurrentSite() == OchBusConst.STATION_STATUS_ARRIVING || station.getIsCurrentSite() == OchBusConst.STATION_STATUS_STOPED) {
+ currentStation = i;
+ break;
+ }
+ }
+ notifyDataSetChanged();
+ }
+
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ return new ViewHolder(LayoutInflater.from(context).inflate(R.layout.item_och_bus_station, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+ holder.tvStationName.setText(stationList.get(position).getSiteName());
+ if (position == currentStation) {
+ holder.tvStationName.setTextColor(context.getResources().getColor(R.color.module_mogo_och_bus_current_station_name_text_color));
+ } else if (position < currentStation) {
+ // 驶过
+ holder.tvStationName.setTextColor(context.getResources().getColor(R.color.module_mogo_och_bus_arrived_station_name_text_color));
+ }else {
+ holder.tvStationName.setTextColor(context.getResources().getColor(R.color.module_mogo_och_bus_not_arrive_station_name_text_color));
+ }
+
+ if (position == 0) {
+ holder.tvStationNotice.setText("起点");
+ holder.tvStationNotice.setVisibility(View.VISIBLE);
+ } else if (position == getItemCount() - 1) {
+ holder.tvStationNotice.setText("终点");
+ holder.tvStationNotice.setVisibility(View.VISIBLE);
+ }else{
+ holder.tvStationNotice.setVisibility(View.GONE);
+ }
+
+ }
+
+ @Override
+ public int getItemCount() {
+ return stationList.size();
+ }
+
+ static class ViewHolder extends RecyclerView.ViewHolder{
+ ImageView ivIcon;
+ TextView tvStationName;
+ TextView tvStationNotice;
+ public ViewHolder(@NonNull View itemView) {
+ super(itemView);
+ ivIcon = itemView.findViewById(R.id.module_mogo_och_bus_station_icon);
+ tvStationName = itemView.findViewById(R.id.module_mogo_och_bus_station_name);
+ tvStationNotice = itemView.findViewById(R.id.module_mogo_och_bus_station_notice);
+ }
+ }
+}
diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.java
new file mode 100644
index 0000000000..b528100786
--- /dev/null
+++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.java
@@ -0,0 +1,13 @@
+package com.mogo.och.bus.constant;
+
+/**
+ * 常量
+ *
+ * @author tongchenfei
+ */
+public class OchBusConst {
+ public static final int STATION_STATUS_IDLE = 0;
+ public static final int STATION_STATUS_STOPED = 1;
+ public static final int STATION_STATUS_LEAVING = 2;
+ public static final int STATION_STATUS_ARRIVING = 3;
+}
diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/OchBusFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/OchBusFragment.java
index 00ca10e6c3..4e6c91f6da 100644
--- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/OchBusFragment.java
+++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/OchBusFragment.java
@@ -1,22 +1,19 @@
package com.mogo.och.bus.fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
-import androidx.constraintlayout.widget.Group;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
-import com.mogo.commons.mvp.MvpFragment;
import com.mogo.module.common.MogoApisHandler;
-import com.mogo.module.common.view.OnPreventFastClickListener;
import com.mogo.och.BaseOchFragment;
import com.mogo.och.bus.R;
+import com.mogo.och.bus.adapter.OchBusStationAdapter;
import com.mogo.och.bus.bean.OchBusStation;
+import com.mogo.och.bus.constant.OchBusConst;
import com.mogo.och.bus.presenter.OchBusPresenter;
import com.mogo.och.view.SlidePanelView;
-import com.mogo.service.adas.entity.AdasOCHData;
import com.mogo.utils.logger.Logger;
import java.util.ArrayList;
@@ -30,32 +27,25 @@ import java.util.List;
*/
public class OchBusFragment extends BaseOchFragment implements SlidePanelView.OnSlidePanelMoveToEndListener {
private static final String TAG = "OchBusFragment";
- private final List stationList = new ArrayList<>();
- private TextView tvNotice;
+ private TextView tvStationNotice;
+ private TextView tvStationName;
+ private RecyclerView rvStationList;
+
+ private OchBusStationAdapter adapter;
@Override
protected void initViews() {
super.initViews();
-// findViewById(R.id.btnEnterOchBus).setOnClickListener(new OnPreventFastClickListener() {
-// @Override
-// public void onClickImpl(View v) {
-// showOchBus();
-// }
-// });
-// findViewById(R.id.btnArrive).setOnClickListener(view->{
-// mPresenter.onArriveAt(new AdasOCHData(10, nextStation.getLon(), nextStation.getLat()));
-// });
-// btnExecute = findViewById(R.id.btnExecute);
-// btnExecute.setOnClickListener(new OnPreventFastClickListener() {
-// @Override
-// public void onClickImpl(View v) {
-// mPresenter.autoDriveToNextStation();
-// }
-// });
- tvNotice = findViewById(R.id.module_mogo_och_bus_station_notice);
+ tvStationNotice = findViewById(R.id.module_mogo_och_bus_current_station_notice);
+ tvStationName = findViewById(R.id.module_mogo_och_bus_current_station_name);
+ rvStationList = findViewById(R.id.module_mogo_och_bus_rv_station_list);
- tvNotice.setOnClickListener(view->{
+ adapter = new OchBusStationAdapter(getContext());
+ rvStationList.setAdapter(adapter);
+ rvStationList.setLayoutManager(new LinearLayoutManager(getContext()));
+
+ tvStationNotice.setOnClickListener(view -> {
showSlidePanle("到达站点,乘客以下车");
});
}
@@ -88,39 +78,39 @@ public class OchBusFragment extends BaseOchFragment busStationList) {
+ public void refreshBusStations(List stationList) {
if (getActivity() == null) {
return;
}
getActivity().runOnUiThread(() -> {
- if (busStationList == null) {
+ if (stationList == null) {
// todo 获取小巴数据失败
} else {
// todo 渲染小巴路线数据
- stationList.clear();
- stationList.addAll(busStationList);
-// for (int i = 0; i < stationList.size(); i++) {
-// OchBusStation station = stationList.get(i);
-// if (station.getIsCurrentSite() == OchBusPresenter.STATION_STATUS_LEAVING) {
-// tvNotice.setText("正在从 " + i + "站驶向" + (i + 1) + "站");
-// nextStation = stationList.get(i + 1);
-// btnExecute.setVisibility(View.GONE);
-// break;
-// } else if (station.getIsCurrentSite() == OchBusPresenter.STATION_STATUS_STOPED) {
-// tvNotice.setText("车辆正停在" + i + "站");
-// btnExecute.setVisibility(View.VISIBLE);
-// if (i == stationList.size() - 1) {
-// btnExecute.setText("单程结束");
-// }else if(i == 0){
-// btnExecute.setText("准备出发");
-// }else{
-// btnExecute.setText("乘客已上车,准备出发");
-// }
-// break;
-// }
-// }
+ adapter.refreshStationList(stationList);
+
+ for (int i = 0; i < stationList.size(); i++) {
+ OchBusStation station = stationList.get(i);
+ if (station.getIsCurrentSite() == OchBusConst.STATION_STATUS_ARRIVING) {
+ tvStationName.setText(station.getSiteName());
+ tvStationNotice.setText("下一站");
+ onAutopilotStatusChanged(true);
+ break;
+ } else if (station.getIsCurrentSite() == OchBusConst.STATION_STATUS_STOPED) {
+ tvStationNotice.setText("当前车站");
+ tvStationName.setText(station.getSiteName());
+ onAutopilotStatusChanged(false);
+ if (i == stationList.size() - 1) {
+ tvStationNotice.setText("终点");
+ showSlidePanle("单程结束");
+ } else if (i == 0) {
+ showSlidePanle("准备出发");
+ } else {
+ showSlidePanle("乘客已上车,准备出发");
+ }
+ break;
+ }
+ }
}
});
}
@@ -130,7 +120,7 @@ public class OchBusFragment extends BaseOchFragment implements IMogoA
private static final String TAG = "OchBusPresenter";
private static final int VEHICAL_TYPE = 10;
- public static final int STATION_STATUS_IDLE = 0;
- public static final int STATION_STATUS_STOPED = 1;
- public static final int STATION_STATUS_LEAVING = 2;
- public static final int STATION_STATUS_ARRIVING = 3;
-
public OchBusPresenter(OchBusFragment view) {
super(view);
MogoApisHandler.getInstance().getApis().getAdasControllerApi().addAdasOCHCallback(this);
diff --git a/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml
new file mode 100644
index 0000000000..ede7dd747d
--- /dev/null
+++ b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml
new file mode 100644
index 0000000000..d184a7bf11
--- /dev/null
+++ b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml
@@ -0,0 +1,9 @@
+
+
+ -
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml b/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml
index 0e51a45408..78888b54d8 100644
--- a/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml
+++ b/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml
@@ -1,19 +1,58 @@
-
+ android:layout_height="@dimen/module_mogo_och_bus_station_panel_height"
+ android:background="#FF2C3862">
+
+ android:layout_marginStart="@dimen/module_mogo_och_bus_station_panel_guide_offset_left"
+ android:layout_marginTop="@dimen/module_mogo_och_bus_station_panel_padding_top"
+ android:text="顺义政府站"
+ android:textColor="@color/module_mogo_och_bus_current_station_name_text_color"
+ android:textSize="@dimen/module_mogo_och_bus_current_station_name_text_size"
+ app:layout_constraintLeft_toLeftOf="@id/vGuide"
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-bus/src/main/res/layout/item_och_bus_station.xml b/OCH/mogo-och-bus/src/main/res/layout/item_och_bus_station.xml
new file mode 100644
index 0000000000..9e953e0753
--- /dev/null
+++ b/OCH/mogo-och-bus/src/main/res/layout/item_och_bus_station.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-bus/src/main/res/values/colors.xml b/OCH/mogo-och-bus/src/main/res/values/colors.xml
new file mode 100644
index 0000000000..b2dbac5862
--- /dev/null
+++ b/OCH/mogo-och-bus/src/main/res/values/colors.xml
@@ -0,0 +1,9 @@
+
+
+ #FF1FA7FF
+ #FFFFFFFF
+ #FFFFFFFF
+ #FF51649D
+ #FF8299EB
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-bus/src/main/res/values/dimens.xml b/OCH/mogo-och-bus/src/main/res/values/dimens.xml
index 2a67585b14..3e8dc4658a 100644
--- a/OCH/mogo-och-bus/src/main/res/values/dimens.xml
+++ b/OCH/mogo-och-bus/src/main/res/values/dimens.xml
@@ -1,7 +1,25 @@
- 24px
464px
- 310px
+ 348px
+
+ 32px
+ 20px
+ 26px
+ 20px
+
+ 15px
+
+ 20px
+ 36px
+ 28px
+ 36px
+
+ 3px
+ 3px
+ 17px
+ 17px
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java b/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java
index f6c8db5b2a..d7f3aa3540 100644
--- a/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java
+++ b/OCH/mogo-och/src/main/java/com/mogo/och/BaseOchFragment.java
@@ -11,7 +11,10 @@ import androidx.fragment.app.Fragment;
import com.mogo.commons.mvp.IView;
import com.mogo.commons.mvp.MvpFragment;
import com.mogo.commons.mvp.Presenter;
+import com.mogo.module.common.MogoApisHandler;
import com.mogo.och.view.SlidePanelView;
+import com.mogo.service.statusmanager.IMogoStatusChangedListener;
+import com.mogo.service.statusmanager.StatusDescriptor;
/**
* 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况
@@ -47,6 +50,20 @@ public abstract class BaseOchFragment> e
LayoutInflater.from(getContext()).inflate(getStationPanelViewId(), flStationPanelContainer);
slidePanelView.setOnSlidePanelMoveToEndListener(onSlideToEndListener);
+
+ checkCallView(MogoApisHandler.getInstance().getApis().getStatusManagerApi().isCallViewShow());
+ MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("Och", StatusDescriptor.CALL_VIEW, callViewListener);
+ }
+
+ private void checkCallView(boolean isShown){
+ if (flStationPanelContainer == null) {
+ return;
+ }
+ if (isShown) {
+ flStationPanelContainer.setTranslationY(131f);
+ }else{
+ flStationPanelContainer.setTranslationY(0f);
+ }
}
public void showSlidePanle(String text) {
@@ -79,6 +96,18 @@ public abstract class BaseOchFragment> e
return null;
}
+ private final IMogoStatusChangedListener callViewListener = (descriptor, isTrue) -> {
+ if (descriptor == StatusDescriptor.CALL_VIEW) {
+ checkCallView(isTrue);
+ }
+ };
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ MogoApisHandler.getInstance().getApis().getStatusManagerApi().unregisterStatusChangedListener("Och", StatusDescriptor.CALL_VIEW, callViewListener);
+ }
+
/**
* 获取站点面板view,在{@link #initViews()}时候添加到container中
* @return 站点面板view
diff --git a/OCH/mogo-och/src/main/java/com/mogo/och/view/SlidePanelView.java b/OCH/mogo-och/src/main/java/com/mogo/och/view/SlidePanelView.java
index d93463dd99..98101a57b5 100644
--- a/OCH/mogo-och/src/main/java/com/mogo/och/view/SlidePanelView.java
+++ b/OCH/mogo-och/src/main/java/com/mogo/och/view/SlidePanelView.java
@@ -14,7 +14,6 @@ import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.util.AttributeSet;
-import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.DecelerateInterpolator;
@@ -49,10 +48,15 @@ public class SlidePanelView extends View {
private final Paint blockPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private final Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
- private static final int BLOCK_START_X = 10;
- private static final int BLOCK_START_Y = 10;
- private static final int TEXT_MARGIN_LEFT = 20;
- private static final int TEXT_MARGIN_RIGHT = 30;
+ private static final int BLOCK_START_X = 15;
+ private static final int BLOCK_START_Y = 15;
+ private static final int NORMAL_TEXT_MARGIN_LEFT = 40;
+ private static final int NORMAL_TEXT_MARGIN_RIGHT = 50;
+ private static final int SHORT_TEXT_MARGIN_LEFT = 60;
+ private static final int SHORT_TEXT_MARGIN_RIGHT = 70;
+
+ private int textMarginLeft = NORMAL_TEXT_MARGIN_LEFT;
+ private int textMarginRight = NORMAL_TEXT_MARGIN_RIGHT;
private OnSlidePanelMoveToEndListener moveToEndListener;
@@ -105,7 +109,7 @@ public class SlidePanelView extends View {
textPaint.setStyle(Paint.Style.FILL);
textPaint.setTextSize(40);
textPaint.setTextAlign(Paint.Align.LEFT);
- textGradient = new LinearGradient(-GRADIENT_OFFSET, 0, 0, 0, new int[]{0x33ffffff, 0xffffffff, 0x29ffffff}, new float[]{0, 0.5f, 1f}, Shader.TileMode.CLAMP);
+ textGradient = new LinearGradient(-GRADIENT_OFFSET, 0, 0, 0, new int[]{0x33ffffff, 0xffffffff, 0x33ffffff}, null, Shader.TileMode.CLAMP);
textGradient.setLocalMatrix(gradientMatrix);
textPaint.setShader(textGradient);
textPaint.getFontMetrics(blockTextMetrics);
@@ -118,17 +122,22 @@ public class SlidePanelView extends View {
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
- int widthSize = MeasureSpec.getSize(widthMeasureSpec);
- int heightSize = MeasureSpec.getSize(heightMeasureSpec);
+ int widthSize;
+ int heightSize;
- Log.d(TAG, "onMeasure:\r\n widthMode: " + widthMode + " widthSize: " + widthSize + " \r\n heightMode: " + heightMode + " heightSize: " + heightSize);
+ if (blockText.length() < 5) {
+ textMarginLeft = SHORT_TEXT_MARGIN_LEFT;
+ textMarginRight = SHORT_TEXT_MARGIN_RIGHT;
+ } else {
+ textMarginLeft = NORMAL_TEXT_MARGIN_LEFT;
+ textMarginRight = NORMAL_TEXT_MARGIN_RIGHT;
+ }
- Log.d(TAG, "textMetrics: ascent: " + blockTextMetrics.ascent + " descent: " + blockTextMetrics.descent + " top: " + blockTextMetrics.top + " bottom: " + blockTextMetrics.bottom);
if (widthMode == MeasureSpec.AT_MOST) {
// 宽度根据图片大小,字符串长度,各种间隔确定
// 高度根据图片大小和上下间隔确定
textPaint.getTextBounds(blockText, 0, blockText.length(), textRect);
- widthSize = BLOCK_START_X * 2 + bmBlock.getWidth() + TEXT_MARGIN_LEFT + TEXT_MARGIN_RIGHT + textRect.width();
+ widthSize = BLOCK_START_X * 2 + bmBlock.getWidth() + textMarginLeft + textMarginRight + textRect.width();
heightSize = BLOCK_START_Y * 2 + bmBlock.getHeight();
widthMeasureSpec = MeasureSpec.makeMeasureSpec(widthSize, widthMode);
heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, heightMode);
@@ -148,7 +157,7 @@ public class SlidePanelView extends View {
matrixAnim.cancel();
}
textOffset = (getHeight() - blockTextMetrics.ascent - blockTextMetrics.descent) / 2;
- matrixAnim = ObjectAnimator.ofFloat(this, "matrixTranslate", 0, w + GRADIENT_OFFSET).setDuration(1000);
+ matrixAnim = ObjectAnimator.ofFloat(this, "matrixTranslate", 0, w + GRADIENT_OFFSET).setDuration(2000);
matrixAnim.setRepeatCount(ValueAnimator.INFINITE);
matrixAnim.start();
}
@@ -231,7 +240,7 @@ public class SlidePanelView extends View {
gradientMatrix.setTranslate(matrixTranslate, 0);
textGradient.setLocalMatrix(gradientMatrix);
canvas.save();
- canvas.drawText(blockText, blockWidth + BLOCK_START_X + TEXT_MARGIN_LEFT, textOffset, textPaint);
+ canvas.drawText(blockText, blockWidth + BLOCK_START_X + textMarginLeft, textOffset, textPaint);
canvas.restore();
// 画滑块
canvas.drawBitmap(bmBlock, BLOCK_START_X + blockOffset, BLOCK_START_Y, blockPaint);
diff --git a/OCH/mogo-och/src/main/res/layout/module_mogo_och_base_fragment.xml b/OCH/mogo-och/src/main/res/layout/module_mogo_och_base_fragment.xml
index 94f34cc808..251f80379c 100644
--- a/OCH/mogo-och/src/main/res/layout/module_mogo_och_base_fragment.xml
+++ b/OCH/mogo-och/src/main/res/layout/module_mogo_och_base_fragment.xml
@@ -16,19 +16,6 @@
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
-
-
-
-
-
-
-
-
-
-
-
-
-