From 69efc7e6f0d9f6a0f2fd67fc8536c46ad9e26aa9 Mon Sep 17 00:00:00 2001 From: liujing Date: Thu, 23 Sep 2021 16:54:43 +0800 Subject: [PATCH] =?UTF-8?q?[add]=20=E8=87=AA=E6=A3=80=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E8=AF=A6=E7=BB=86=E6=8C=87=E6=A0=87=E5=BC=B9=E6=A1=86=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20=20=E5=B7=AE=E7=BD=91=E6=A0=BC=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E5=92=8C=E4=BA=91=E7=AB=AF=E6=95=B0=E6=8D=AE=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/check/view/CheckActivity.java | 4 +- .../function/check/view/CheckAdapter.java | 41 +--- .../core/function/check/view/CheckDialog.java | 2 +- .../function/check/view/CheckInfoAdapter.java | 60 +++++ .../check/view/CheckInfoGridItemDivider.java | 218 ++++++++++++++++++ .../check/view/CheckInfoListDialog.java | 15 +- .../check/view/CheckInfoListGridItemDec.java | 74 ------ .../src/main/res/drawable/check_driver.xml | 5 + .../main/res/layout/check_info_adapter.xml | 33 +++ .../src/main/res/values/styles.xml | 1 + 10 files changed, 331 insertions(+), 122 deletions(-) create mode 100644 core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoAdapter.java create mode 100644 core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoGridItemDivider.java delete mode 100644 core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoListGridItemDec.java create mode 100644 core/function-impl/mogo-core-function-check/src/main/res/drawable/check_driver.xml create mode 100644 core/function-impl/mogo-core-function-check/src/main/res/layout/check_info_adapter.xml diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckActivity.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckActivity.java index bc925c03d8..e57eb6562e 100644 --- a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckActivity.java +++ b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckActivity.java @@ -45,7 +45,7 @@ import io.reactivex.schedulers.Schedulers; /** * @author liujing - * @description 车辆监控页面 + * @description 车辆监控页面首页 * @since: 7/27/21 */ public class CheckActivity extends AppCompatActivity { @@ -180,7 +180,7 @@ public class CheckActivity extends AppCompatActivity { ObjectAnimator animatorX = ObjectAnimator.ofFloat(scanLineImage, "translationX", scanBottomCarImage.getWidth(), 0); ObjectAnimator animatorAl = ObjectAnimator.ofFloat(scanLineImage, "alpha", 0, 1); setAnimation.playTogether(animatorX, animatorAl); - setAnimation.setDuration(800); + setAnimation.setDuration(200); setAnimation.start(); setAnimation.addListener(new AnimatorListenerAdapter() { @Override diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckAdapter.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckAdapter.java index 7ed30862ac..2030839c76 100644 --- a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckAdapter.java +++ b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckAdapter.java @@ -19,7 +19,7 @@ import java.util.ArrayList; /** * @author liujing - * @description 检测界面单元格 + * @description 检测首页单元格 * @since: 7/27/21 */ public class CheckAdapter extends RecyclerView.Adapter { @@ -84,9 +84,6 @@ public class CheckAdapter extends RecyclerView.Adapter private TextView autoRiskState; private ImageView iconAuto; - private TextView iconyingTitle; - private TextView yingRiskState; - public CheckListViewHolder(@NonNull View itemView) { super(itemView); viewTitle = itemView.findViewById(R.id.list_item_title); @@ -97,42 +94,6 @@ public class CheckAdapter extends RecyclerView.Adapter } } - /** - * 硬件检测 - */ - class CheckImage extends RecyclerView.ViewHolder { - private ImageView pad; - private ImageView jiaoJiGuangTop; - private TextView jiaoJiGuangTopText; - private ImageView jiaoJiGuangBottom; - private TextView jiaoJiGuangBottomText; - private ImageView zhuJiGuang; - private ImageView rtk; - private ImageView cameraTop; - private ImageView cameraMiddle; - private ImageView cameraBottom; - private ImageView cameraBehind; - private ImageView luyouqi; - private ImageView obu; - - public CheckImage(@NonNull View itemView) { - super(itemView); - pad = itemView.findViewById(R.id.pad); - jiaoJiGuangTop = itemView.findViewById(R.id.jiaoJiGuangTop); - jiaoJiGuangTopText = itemView.findViewById(R.id.jiaoJiGuangTop_txt); - jiaoJiGuangBottom = itemView.findViewById(R.id.jiaoJiGuangBottom); - jiaoJiGuangBottomText = itemView.findViewById(R.id.jiaoJiGuangBottom_txt); - zhuJiGuang = itemView.findViewById(R.id.zhujiguang); - rtk = itemView.findViewById(R.id.rtk); - cameraTop = itemView.findViewById(R.id.top); - cameraMiddle = itemView.findViewById(R.id.middle); - cameraBottom = itemView.findViewById(R.id.bottom); - cameraBehind = itemView.findViewById(R.id.camera_begind); - luyouqi = itemView.findViewById(R.id.luyouqi); - obu = itemView.findViewById(R.id.obu); - } - } - @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { try { diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckDialog.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckDialog.java index e7468440cd..72946b7e1d 100644 --- a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckDialog.java +++ b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckDialog.java @@ -11,7 +11,7 @@ import com.mogo.module.common.dialog.BaseFloatDialog; /** * @author liujing - * @description 车辆监控弹框提示 + * @description 车辆监控弹框提示(长时间未检测或者后台任务检测出现问题的弹框) * @since: 7/30/21 */ public class CheckDialog extends BaseFloatDialog { diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoAdapter.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoAdapter.java new file mode 100644 index 0000000000..90f2d5473a --- /dev/null +++ b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoAdapter.java @@ -0,0 +1,60 @@ +package com.mogo.eagle.core.function.check.view; + +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.eagle.core.function.check.R; + +import org.w3c.dom.Text; + +/** + * @author liujing + * @description 点击自动驾驶icon显示指标详情结果 + * @since: 9/23/21 + */ +public class CheckInfoAdapter extends RecyclerView.Adapter { + LayoutInflater mLayoutInflater; + private Context mContext; + + public CheckInfoAdapter(Context context) { + mContext = context; + mLayoutInflater = LayoutInflater.from(context); + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View v = mLayoutInflater.inflate(R.layout.check_info_adapter, parent, + false); + CheckInfoAdapter.CheckInfoViewHolder holder = new CheckInfoAdapter.CheckInfoViewHolder(v); + return holder; + } + + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + + } + + @Override + public int getItemCount() { + return 10; + } + + public class CheckInfoViewHolder extends RecyclerView.ViewHolder { + private ImageView checkIcon; + private TextView mTextView; + public CheckInfoViewHolder(View v) { + super(v); + checkIcon = v.findViewById(R.id.info_check_icon); + mTextView = v.findViewById(R.id.info_result_tx); + } + } +} diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoGridItemDivider.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoGridItemDivider.java new file mode 100644 index 0000000000..c874688a9c --- /dev/null +++ b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoGridItemDivider.java @@ -0,0 +1,218 @@ +package com.mogo.eagle.core.function.check.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.view.View; + +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; + +/** + * @author liujing + * @description 描述 + * @since: 9/22/21 + */ +public class CheckInfoGridItemDivider extends RecyclerView.ItemDecoration { + private String TAG = getClass().getSimpleName(); + private static final int[] ATTRS = new int[]{android.R.attr.listDivider}; + private Drawable divider; + + public CheckInfoGridItemDivider(Context context) { + final TypedArray a = context.obtainStyledAttributes(ATTRS); + divider = a.getDrawable(0); + a.recycle(); + } + + public CheckInfoGridItemDivider(Drawable drawable) { + divider = drawable; + } + + public CheckInfoGridItemDivider(int height, int color) { + GradientDrawable shapeDrawable = new GradientDrawable(); + shapeDrawable.setColor(color); + shapeDrawable.setShape(GradientDrawable.RECTANGLE); + shapeDrawable.setSize(height, height); + divider = shapeDrawable; + } + + + @Override + public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { + + drawHorizontal(c, parent); + drawVertical(c, parent); + + } + + private int getSpanCount(RecyclerView parent) { + // 列数 + int spanCount = -1; + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof GridLayoutManager) { + + spanCount = ((GridLayoutManager) layoutManager).getSpanCount(); + } else if (layoutManager instanceof StaggeredGridLayoutManager) { + spanCount = ((StaggeredGridLayoutManager) layoutManager) + .getSpanCount(); + } + return spanCount; + } + + public void drawHorizontal(Canvas c, RecyclerView parent) { + int childCount = parent.getChildCount(); //获取可见item的数量 + int spanCount = getSpanCount(parent); + for (int i = 0; i < childCount; i++) { + final View child = parent.getChildAt(i); + final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child + .getLayoutParams(); + final int left = child.getLeft() - params.leftMargin; + final int right = child.getRight() + params.rightMargin + + divider.getIntrinsicWidth(); + final int top = child.getBottom() + params.bottomMargin; + final int bottom = top + divider.getIntrinsicHeight(); + divider.setBounds(left, top, right, bottom); + divider.draw(c); + if (i < spanCount) { //画第一行顶部的分割线 + drawHorizontalForFirstRow(c, child); + } + } + } + + private void drawHorizontalForFirstRow(Canvas c, View child) { + final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child + .getLayoutParams(); + int left = child.getLeft() - params.leftMargin - divider.getIntrinsicWidth(); + int top = child.getTop() - params.topMargin - divider.getIntrinsicHeight(); + int right = child.getRight() + params.rightMargin + divider.getIntrinsicWidth(); + int bottom = top + divider.getIntrinsicHeight(); + divider.setBounds(left, top, right, bottom); + divider.draw(c); + } + + private void drawVerticalForFirstColum(Canvas c, View child) { + final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child + .getLayoutParams(); + int left = child.getLeft() - params.leftMargin - divider.getIntrinsicWidth(); + int top = child.getTop() - params.topMargin; + int right = child.getLeft() - params.leftMargin; + int bottom = top + child.getHeight() + divider.getIntrinsicHeight(); + divider.setBounds(left, top, right, bottom); + divider.draw(c); + } + + public void drawVertical(Canvas c, RecyclerView parent) { + final int childCount = parent.getChildCount(); + for (int i = 0; i < childCount; i++) { + final View child = parent.getChildAt(i); + + final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child + .getLayoutParams(); + final int top = child.getTop() - params.topMargin; + final int bottom = child.getBottom() + params.bottomMargin; + final int left = child.getRight() + params.rightMargin; + final int right = left + divider.getIntrinsicWidth(); + divider.setBounds(left, top, right, bottom); + divider.draw(c); + if (isFirstColum(parent, i, getSpanCount(parent))) { //画第一列左边分割线 + drawVerticalForFirstColum(c, child); + } + } + } + + private boolean isLastColum(RecyclerView parent, int pos, int spanCount, + int childCount) { + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof GridLayoutManager) { + if ((pos + 1) % spanCount == 0)// 如果是最后一列,则不需要绘制右边 + { + return true; + } + } else if (layoutManager instanceof StaggeredGridLayoutManager) { + int orientation = ((StaggeredGridLayoutManager) layoutManager) + .getOrientation(); + if (orientation == StaggeredGridLayoutManager.VERTICAL) { + if ((pos + 1) % spanCount == 0)// 如果是最后一列,则不需要绘制右边 + { + return true; + } + } else { + childCount = childCount - childCount % spanCount; + if (pos >= childCount)// 如果是最后一列,则不需要绘制右边 + return true; + } + } + return false; + } + + private boolean isLastRaw(RecyclerView parent, int pos, int spanCount, + int childCount) { + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof GridLayoutManager) { + childCount = childCount - childCount % spanCount; + if (pos >= childCount)// 如果是最后一行,则不需要绘制底部 + return true; + } else if (layoutManager instanceof StaggeredGridLayoutManager) { + int orientation = ((StaggeredGridLayoutManager) layoutManager) + .getOrientation(); + if (orientation == StaggeredGridLayoutManager.VERTICAL) { + childCount = childCount - childCount % spanCount; + // 如果是最后一行,则不需要绘制底部 + if (pos >= childCount) + return true; + } else + { + // 如果是最后一行,则不需要绘制底部 + if ((pos + 1) % spanCount == 0) { + return true; + } + } + } + return false; + } + + //是否为第一列 + private boolean isFirstColum(RecyclerView parent, int pos, int spanCount) { + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof GridLayoutManager) { //网格布局 + if ((pos + 1) % spanCount == 1) { + return true; + } + } + return false; + } + + //是否为第一行 + private boolean isFirstRaw(int pos, int spanCount) { + if (pos < spanCount) { + return true; + } + return false; + } + + @Override + public void getItemOffsets(Rect outRect, int itemPosition, + RecyclerView parent) { + int spanCount = getSpanCount(parent); //列数 + + if (itemPosition == 0) { //第一行第一个,四边都画 + outRect.set(divider.getIntrinsicWidth(), divider.getIntrinsicHeight(), + divider.getIntrinsicWidth(), divider.getIntrinsicHeight()); + } else if (isFirstRaw(itemPosition, spanCount)) { //第一行,画上下右三边 + outRect.set(0, divider.getIntrinsicHeight(), divider.getIntrinsicWidth(), divider.getIntrinsicHeight()); + } else if (isFirstColum(parent, itemPosition, spanCount)) { //第一列,画左右下三边 + outRect.set(divider.getIntrinsicWidth(), 0, divider.getIntrinsicWidth(), divider.getIntrinsicHeight()); + } else { //其他,画右下两边 + outRect.set(0, 0, divider.getIntrinsicWidth(), divider.getIntrinsicHeight()); + } + + } + +} + diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoListDialog.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoListDialog.java index 16b7ef64c6..b0a9b1060a 100644 --- a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoListDialog.java +++ b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoListDialog.java @@ -1,6 +1,7 @@ package com.mogo.eagle.core.function.check.view; import android.content.Context; +import android.graphics.Color; import androidx.annotation.NonNull; import androidx.recyclerview.widget.GridLayoutManager; @@ -33,12 +34,16 @@ public class CheckInfoListDialog extends BaseFloatDialog { public void initView() { setContentView(R.layout.check_info_list); - mRecyclerView = findViewById(R.id.module_services_id_recycler_view); - GridLayoutManager layoutManager = new GridLayoutManager(mContext, 4); + mRecyclerView = findViewById(R.id.check_list_recycler); +// GridLayoutManager layoutManager = new GridLayoutManager(mContext, 4); +// mRecyclerView.setLayoutManager(layoutManager); //表示竖直显示.默认VERTICAL - layoutManager.setOrientation(GridLayoutManager.HORIZONTAL); - mRecyclerView.addItemDecoration(new CheckInfoListGridItemDec()); - mRecyclerView.setLayoutManager(layoutManager); +// layoutManager.setOrientation(GridLayoutManager.HORIZONTAL); +// CheckInfoGridItemDivider gridLayoutDivider = new CheckInfoGridItemDivider(2, Color.parseColor("#CCCCCC")); +// mRecyclerView.addItemDecoration(gridLayoutDivider); + mRecyclerView.setAdapter(new CheckInfoAdapter(mContext)); + + //关闭按钮 findViewById(R.id.cancel_info_list_button).setOnClickListener(v -> { cancel(); }); diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoListGridItemDec.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoListGridItemDec.java deleted file mode 100644 index bc0b27e7be..0000000000 --- a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoListGridItemDec.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.mogo.eagle.core.function.check.view; - -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; -import android.view.View; - -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -/** - * @author liujing - * @description 描述 - * @since: 9/22/21 - */ -class CheckInfoListGridItemDec extends RecyclerView.ItemDecoration { - //分割线的宽度 - private static final int DIVIDER_SIZE = 5; - - private final Paint mPaint = new Paint(); - - public CheckInfoListGridItemDec() { - init(); - } - - private void init() { - mPaint.setColor(Color.RED); - } - - @Override - public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { - super.onDraw(c, parent, state); - RecyclerView.LayoutManager manager = parent.getLayoutManager(); - if (manager instanceof GridLayoutManager) { - //表格的边框主要是由分割线和下分割线 - for (int i = 0; i < parent.getChildCount(); ++i) { - //获取子元素 - View child = parent.getChildAt(i); - //我们首先来制作子元素右分割线,或者说纵向分割线 - setUpVerticalDivider(child, c); - //制作横向分割线 - setUpHorizontalDivider(child, c); - } - } else { - throw new IllegalArgumentException("LayoutManager使用错误"); - } - } - - private void setUpVerticalDivider(View child, Canvas canvas) { - float left = child.getRight(); - float top = child.getTop(); - float right = left + DIVIDER_SIZE; - float bottom = child.getBottom() + DIVIDER_SIZE; - canvas.drawRect(left, top, right, bottom, mPaint); - } - - private void setUpHorizontalDivider(View child, Canvas canvas) { - float left = child.getLeft(); - float top = child.getBottom(); - float right = child.getRight(); - float bottom = top + DIVIDER_SIZE; - canvas.drawRect(left, top, right, bottom, mPaint); - } - - - @Override - public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { - super.getItemOffsets(outRect, view, parent, state); - outRect.set(0, 0, DIVIDER_SIZE, DIVIDER_SIZE); - } - - -} diff --git a/core/function-impl/mogo-core-function-check/src/main/res/drawable/check_driver.xml b/core/function-impl/mogo-core-function-check/src/main/res/drawable/check_driver.xml new file mode 100644 index 0000000000..04aae14090 --- /dev/null +++ b/core/function-impl/mogo-core-function-check/src/main/res/drawable/check_driver.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-check/src/main/res/layout/check_info_adapter.xml b/core/function-impl/mogo-core-function-check/src/main/res/layout/check_info_adapter.xml new file mode 100644 index 0000000000..3bb21ea884 --- /dev/null +++ b/core/function-impl/mogo-core-function-check/src/main/res/layout/check_info_adapter.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-check/src/main/res/values/styles.xml b/core/function-impl/mogo-core-function-check/src/main/res/values/styles.xml index 7b4a8dce13..a75b06b449 100644 --- a/core/function-impl/mogo-core-function-check/src/main/res/values/styles.xml +++ b/core/function-impl/mogo-core-function-check/src/main/res/values/styles.xml @@ -6,5 +6,6 @@ @android:drawable/progress_indeterminate_horizontal @drawable/check_progress + @drawable/check_driver \ No newline at end of file