From 8046dfe5115b04eb79bf1f8c0f32d565ecc88465 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Wed, 12 Aug 2020 17:32:10 +0800 Subject: [PATCH] opt ui --- ...dapter.java => V2XSurroundingAdapter.java} | 28 +++- ...der.java => V2XSurroundingViewHolder.java} | 4 +- .../v2x/fragment/V2XSurroundingFragment.java | 22 ++- .../presenter/SurroundingEventPresenter.java | 3 +- .../module/v2x/utils/CornerTransform.java | 139 ++++++++++++++++++ .../v2x/view/SurroundingMarginDecoration.java | 3 +- ...odule_event_panel_fragment_surrounding.xml | 9 +- ...module_fragment_surrounding_event_item.xml | 13 +- .../src/main/res/values-xhdpi/dimens.xml | 10 +- .../src/main/res/values/dimens.xml | 10 +- .../src/main/res/values/strings.xml | 2 + 11 files changed, 201 insertions(+), 42 deletions(-) rename modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/{SurroundingEventAdapter.java => V2XSurroundingAdapter.java} (85%) rename modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/{SurroundingEventViewHolder.java => V2XSurroundingViewHolder.java} (64%) create mode 100644 modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/CornerTransform.java diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/SurroundingEventAdapter.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XSurroundingAdapter.java similarity index 85% rename from modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/SurroundingEventAdapter.java rename to modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XSurroundingAdapter.java index 8e3189ad3d..224fcfef4d 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/SurroundingEventAdapter.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XSurroundingAdapter.java @@ -23,7 +23,7 @@ import java.util.List; * @description 周边 * @since 2020/7/29 */ -public class SurroundingEventAdapter extends RecyclerView.Adapter { +public class V2XSurroundingAdapter extends RecyclerView.Adapter { private List mPoiInfosList; private Context mContext; private ImageView mBgImageView; @@ -34,7 +34,7 @@ public class SurroundingEventAdapter extends RecyclerView.Adapter poiInfosList, SurroundingItemClickListener clickListener) { + public V2XSurroundingAdapter(Context context, List poiInfosList, SurroundingItemClickListener clickListener) { mContext = context; mPoiInfosList = poiInfosList; mClickListener = clickListener; @@ -47,14 +47,14 @@ public class SurroundingEventAdapter extends RecyclerView.Adapter poiInfosList = new ArrayList<>(); private IMogoServiceApis mApis; @@ -93,11 +90,11 @@ public class V2XSurroundingFragment extends MvpFragment exploreWayList = construction.getConstrutList(); Logger.d(TAG, "onItemClickListener exploreWayList.size() = " + exploreWayList.size()); if (exploreWayList != null && exploreWayList.size() > 0) { @@ -261,7 +258,6 @@ public class V2XSurroundingFragment extends MvpFragment exploreWayList) { Logger.e(TAG, "showBonndsRoadtion exploreWayList.size() = " + exploreWayList.size()); Rect rect = new Rect( - (int) getContext().getResources().getDimension(R.dimen.tanlu_module_map_left), - (int) getContext().getResources().getDimension(R.dimen.tanlu_module_map_top), - (int) getContext().getResources().getDimension(R.dimen.tanlu_module_map_right), - (int) getContext().getResources().getDimension(R.dimen.tanlu_module_map_bottom)); + (int) getContext().getResources().getDimension(R.dimen.module_v2x_map_left), + (int) getContext().getResources().getDimension(R.dimen.module_v2x_map_top), + (int) getContext().getResources().getDimension(R.dimen.module_v2x_map_right), + (int) getContext().getResources().getDimension(R.dimen.module_v2x_map_bottom)); moveNotFresh(); //第一个参数:调用者,第二个参数:当前自车的位置,第三个参数:需要显示在范围内的点(不包含自车的位置) diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/presenter/SurroundingEventPresenter.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/presenter/SurroundingEventPresenter.java index 8bc5a50beb..26d7828375 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/presenter/SurroundingEventPresenter.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/presenter/SurroundingEventPresenter.java @@ -63,7 +63,7 @@ public class SurroundingEventPresenter extends Presenter { } Center center = new Center(location.getLatitude(), location.getLongitude()); String[] poiTypes = {"10002", "10003", "10006", "10007", "10008", "10010", "10011", "10013", "10015"}; - SurroundingRequest request = new SurroundingRequest(center, poiTypes, 5000, 15); + SurroundingRequest request = new SurroundingRequest(center, poiTypes, 5, 15); eventApiService.getSurroundingEventList(Utils.getSn(), convert(GsonUtil.jsonFromObject(request))) .subscribeOn(Schedulers.io()) @@ -87,6 +87,7 @@ public class SurroundingEventPresenter extends Presenter { @Override public void onError(String message, int code) { super.onError(message, code); + mView.showSurroudingData(null); Logger.e("SurroundingFragment", "onError message = " + message + " >>> code = " + code); } }); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/CornerTransform.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/CornerTransform.java new file mode 100644 index 0000000000..91897c33e3 --- /dev/null +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/CornerTransform.java @@ -0,0 +1,139 @@ +package com.mogo.module.v2x.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.RectF; +import android.graphics.Shader; + +import androidx.annotation.NonNull; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.Transformation; +import com.bumptech.glide.load.engine.Resource; +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; +import com.bumptech.glide.load.resource.bitmap.BitmapResource; +import com.bumptech.glide.util.Util; + +import java.security.MessageDigest; + +/** + * @author lixiaopeng + * @description + * @since 2020/8/12 + */ +public class CornerTransform implements Transformation { + private BitmapPool mBitmapPool; + private float radius; + private boolean exceptLeftTop, exceptRightTop, exceptLeftBottom, exceptRightBotoom; + + /** + * 除了那几个角不需要圆角的 + * + * @param leftTop + * @param rightTop + * @param leftBottom + * @param rightBottom + */ + public void setExceptCorner(boolean leftTop, boolean rightTop, boolean leftBottom, boolean rightBottom) { + this.exceptLeftTop = leftTop; + this.exceptRightTop = rightTop; + this.exceptLeftBottom = leftBottom; + this.exceptRightBotoom = rightBottom; + } + + public CornerTransform(Context context, float radius) { + this.mBitmapPool = Glide.get(context).getBitmapPool(); + this.radius = radius; + } + + @NonNull + @Override + public Resource transform(@NonNull Context context, @NonNull Resource resource, int outWidth, int outHeight) { + Bitmap source = resource.get(); + int finalWidth, finalHeight; + float ratio; //输出目标的宽高或高宽比例 + if (outWidth > outHeight) { //输出宽度>输出高度,求高宽比 + ratio = (float) outHeight / (float) outWidth; + finalWidth = source.getWidth(); + finalHeight = (int) ((float) source.getWidth() * ratio); //固定原图宽度,求最终高度 + if (finalHeight > source.getHeight()) { //求出的最终高度>原图高度,求宽高比 + ratio = (float) outWidth / (float) outHeight; + finalHeight = source.getHeight(); + finalWidth = (int) ((float) source.getHeight() * ratio);//固定原图高度,求最终宽度 + } + } else if (outWidth < outHeight) { //输出宽度 < 输出高度,求宽高比 + ratio = (float) outWidth / (float) outHeight; + finalHeight = source.getHeight(); + finalWidth = (int) ((float) source.getHeight() * ratio);//固定原图高度,求最终宽度 + if (finalWidth > source.getWidth()) { //求出的最终宽度 > 原图宽度,求高宽比 + ratio = (float) outHeight / (float) outWidth; + finalWidth = source.getWidth(); + finalHeight = (int) ((float) source.getWidth() * ratio); + } + } else { //输出宽度=输出高度 + finalHeight = source.getHeight(); + finalWidth = finalHeight; + } + + //修正圆角 + this.radius *= (float) finalHeight / (float) outHeight; + Bitmap outBitmap = this.mBitmapPool.get(finalWidth, finalHeight, Bitmap.Config.ARGB_8888); + if (outBitmap == null) { + outBitmap = Bitmap.createBitmap(finalWidth, finalHeight, Bitmap.Config.ARGB_8888); + } + + Canvas canvas = new Canvas(outBitmap); + Paint paint = new Paint(); + //关联画笔绘制的原图bitmap + BitmapShader shader = new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); + //计算中心位置,进行偏移 + int width = (source.getWidth() - finalWidth) / 2; + int height = (source.getHeight() - finalHeight) / 2; + if (width != 0 || height != 0) { + Matrix matrix = new Matrix(); + matrix.setTranslate((float) (-width), (float) (-height)); + shader.setLocalMatrix(matrix); + } + + paint.setShader(shader); + paint.setAntiAlias(true); + RectF rectF = new RectF(0.0F, 0.0F, (float) canvas.getWidth(), (float) canvas.getHeight()); + canvas.drawRoundRect(rectF, this.radius, this.radius, paint); //先绘制圆角矩形 + + if (exceptLeftTop) { //左上角不为圆角 + canvas.drawRect(0, 0, radius, radius, paint); + } + if (exceptRightTop) {//右上角不为圆角 + canvas.drawRect(canvas.getWidth() - radius, 0, canvas.getWidth(), radius, paint); + } + + if (exceptLeftBottom) {//左下角不为圆角 + canvas.drawRect(0, canvas.getHeight() - radius, radius, canvas.getHeight(), paint); + } + + if (exceptRightBotoom) {//右下角不为圆角 + canvas.drawRect(canvas.getWidth() - radius, canvas.getHeight() - radius, canvas.getWidth(), canvas.getHeight(), paint); + } + + return BitmapResource.obtain(outBitmap, this.mBitmapPool); + } + + @Override + public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) { + + } + + public String getId() { + return this.getClass().getName(); + } + + public int hashCode() { + //避免Transformation重复设置,导致图片闪烁,同一个圆角值的Transformation视为同一个对象 + return Util.hashCode(getId().hashCode(), Util.hashCode(this.radius)); + } + +} diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SurroundingMarginDecoration.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SurroundingMarginDecoration.java index 38b67e6f3e..214a12be31 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SurroundingMarginDecoration.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SurroundingMarginDecoration.java @@ -20,13 +20,12 @@ public class SurroundingMarginDecoration extends RecyclerView.ItemDecoration { @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.bottom = margin; + outRect.right = 0; //由于每行都只有2个,所以第一个都是2的倍数,把左边距设为0 if (parent.getChildLayoutPosition(view) % 2 == 0) { outRect.left = 0; - outRect.right = margin; } else { outRect.left = margin; - outRect.right = 0; } } diff --git a/modules/mogo-module-v2x/src/main/res/layout/module_event_panel_fragment_surrounding.xml b/modules/mogo-module-v2x/src/main/res/layout/module_event_panel_fragment_surrounding.xml index d46a797d3d..b1dc0f58a7 100644 --- a/modules/mogo-module-v2x/src/main/res/layout/module_event_panel_fragment_surrounding.xml +++ b/modules/mogo-module-v2x/src/main/res/layout/module_event_panel_fragment_surrounding.xml @@ -2,22 +2,21 @@ @@ -43,6 +42,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10px" + android:layout_marginLeft="10px" + android:layout_marginRight="10px" android:layout_marginBottom="20px" android:layout_below="@+id/layout_top"> diff --git a/modules/mogo-module-v2x/src/main/res/layout/module_fragment_surrounding_event_item.xml b/modules/mogo-module-v2x/src/main/res/layout/module_fragment_surrounding_event_item.xml index bb92f13ae4..f40530bbef 100644 --- a/modules/mogo-module-v2x/src/main/res/layout/module_fragment_surrounding_event_item.xml +++ b/modules/mogo-module-v2x/src/main/res/layout/module_fragment_surrounding_event_item.xml @@ -1,26 +1,27 @@ @@ -40,7 +41,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" - android:layout_marginRight="30px" + android:layout_marginRight="12px" android:layout_centerVertical="true" android:textSize="16px" android:textColor="@color/transparent_white_30" diff --git a/modules/mogo-module-v2x/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-v2x/src/main/res/values-xhdpi/dimens.xml index a7a1f0b66f..b063c2f4ef 100644 --- a/modules/mogo-module-v2x/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-v2x/src/main/res/values-xhdpi/dimens.xml @@ -23,11 +23,11 @@ 40px 80px - 6px - 550px - 200px - 200px - 100px + 6px + 550px + 200px + 200px + 100px diff --git a/modules/mogo-module-v2x/src/main/res/values/dimens.xml b/modules/mogo-module-v2x/src/main/res/values/dimens.xml index 12bbc42e11..831b055b8d 100644 --- a/modules/mogo-module-v2x/src/main/res/values/dimens.xml +++ b/modules/mogo-module-v2x/src/main/res/values/dimens.xml @@ -24,11 +24,13 @@ 22px 40px + 6px 16px - 550px - 200px - 200px - 100px + + 550px + 200px + 200px + 100px diff --git a/modules/mogo-module-v2x/src/main/res/values/strings.xml b/modules/mogo-module-v2x/src/main/res/values/strings.xml index a4dd2e5fa2..f5455700c6 100644 --- a/modules/mogo-module-v2x/src/main/res/values/strings.xml +++ b/modules/mogo-module-v2x/src/main/res/values/strings.xml @@ -6,5 +6,7 @@ 已提交 感谢已送达 周围5公里,共 %d 条交通信息 + 分享 + 刷新