From d804bf82e1ed2a4230e763d6cd5d337ab7a0a3d8 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Thu, 28 Mar 2024 14:15:21 +0800 Subject: [PATCH] =?UTF-8?q?[6.3.0]=20[bugfix]=20[=E6=BB=91=E5=8A=A8?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E5=86=85=E5=AD=98=E8=BF=87=E5=A4=A7=E5=90=8E?= =?UTF-8?q?=E9=87=8D=E6=96=B0decode]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/och/bus/view/SlidePanelView.java | 26 +++++++++++--- .../bus_base_slide_block.png | Bin .../orderlogmanager/OchChainLogManager.kt | 2 ++ .../com/mogo/och/bus/view/SlidePanelView.java | 33 +++++++++++++----- .../drawable-nodpi}/bus_base_slide_block.png | Bin .../drawable-xhdpi/bus_base_slide_block.png | Bin 4933 -> 0 bytes .../res/drawable/bus_base_slide_block.png | Bin 4933 -> 0 bytes 7 files changed, 49 insertions(+), 12 deletions(-) rename OCH/bus/driver/src/main/res/{drawable-xhdpi => drawable-nodpi}/bus_base_slide_block.png (100%) rename OCH/{bus/driver/src/main/res/drawable => shuttle/driver/src/main/res/drawable-nodpi}/bus_base_slide_block.png (100%) delete mode 100644 OCH/shuttle/driver/src/main/res/drawable-xhdpi/bus_base_slide_block.png delete mode 100644 OCH/shuttle/driver/src/main/res/drawable/bus_base_slide_block.png diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java index b603c90458..6692778b2e 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java @@ -22,9 +22,12 @@ import android.view.animation.DecelerateInterpolator; import androidx.annotation.Nullable; import com.mogo.commons.AbsMogoApplication; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.ConvertUtils; import com.mogo.eagle.core.utilcode.util.ThreadUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.bus.R; +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager; import me.jessyan.autosize.AutoSizeConfig; import me.jessyan.autosize.utils.AutoSizeUtils; @@ -130,9 +133,13 @@ public class SlidePanelView extends View { textGradient.setLocalMatrix(gradientMatrix); textPaint.setShader(textGradient); textPaint.getFontMetrics(blockTextMetrics); + decodeImage(); + } + + private void decodeImage(){ ThreadUtils.getCpuPool().execute(() -> { int size = AutoSizeUtils.dp2px(getContext(), 120); - BitmapFactory.Options opts = new BitmapFactory.Options(); //todo yakun 优化 + BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inDensity = (int) AutoSizeConfig.getInstance().getInitDensity(); bmBlock = BitmapFactory.decodeResource(getResources(), R.drawable.bus_base_slide_block,opts); bmBlock = Bitmap.createScaledBitmap(bmBlock, size, size, true); @@ -269,13 +276,24 @@ public class SlidePanelView extends View { // 画文字 gradientMatrix.setTranslate(matrixTranslate, 0); textGradient.setLocalMatrix(gradientMatrix); - if(bmBlock!=null) { canvas.save(); canvas.drawText(blockText, (float) (blockWidth + BLOCK_START_X + textMarginLeft), (float) textOffset, textPaint); canvas.restore(); - // 画滑块 - canvas.drawBitmap(bmBlock, (float) (BLOCK_START_X + blockOffset), (float) BLOCK_START_Y, blockPaint); + if (bmBlock != null) { + if(bmBlock.getByteCount()>=5*1024*1024){ + OchChainLogManager.writeChainLog("崩溃兜底策略", + "图片大小监听"+ ConvertUtils.byte2FitMemorySize(bmBlock.getByteCount()),true,OchChainLogManager.EVENT_KEY_INFE_ERROR); + bmBlock.recycle(); + bmBlock = null; + blockWidth = 0; + decodeImage(); + }else { + // 画滑块 + canvas.drawBitmap(bmBlock, (float) (BLOCK_START_X + blockOffset), (float) BLOCK_START_Y, blockPaint); + CallerLogger.d(TAG,"图片大小监听"+ ConvertUtils.byte2FitMemorySize(bmBlock.getByteCount())); + } } + } public interface OnSlidePanelMoveToEndListener { diff --git a/OCH/bus/driver/src/main/res/drawable-xhdpi/bus_base_slide_block.png b/OCH/bus/driver/src/main/res/drawable-nodpi/bus_base_slide_block.png similarity index 100% rename from OCH/bus/driver/src/main/res/drawable-xhdpi/bus_base_slide_block.png rename to OCH/bus/driver/src/main/res/drawable-nodpi/bus_base_slide_block.png diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt index 7429eeeb51..0162529472 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt @@ -19,6 +19,8 @@ object OchChainLogManager { const val EVENT_KEY_INFE_WITH_TRAJECTORY = "event_key_och_trajectory_info" const val EVENT_KEY_INFE_WITH_MUSIC = "event_key_och_music_info" const val EVENT_KEY_INFE_WITH_BUS = "event_key_och_bus_info" + // 需要举行观察的 + const val EVENT_KEY_INFE_ERROR = "event_key_och_error" /** * @param Info 订单详细信息 diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java index 479636cfbb..72ca61b1c4 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java @@ -22,9 +22,12 @@ import android.view.animation.DecelerateInterpolator; import androidx.annotation.Nullable; import com.mogo.commons.AbsMogoApplication; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.ConvertUtils; import com.mogo.eagle.core.utilcode.util.ThreadUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.bus.R; +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager; import me.jessyan.autosize.AutoSizeConfig; import me.jessyan.autosize.utils.AutoSizeUtils; @@ -129,6 +132,10 @@ public class SlidePanelView extends View { textGradient.setLocalMatrix(gradientMatrix); textPaint.setShader(textGradient); textPaint.getFontMetrics(blockTextMetrics); + decodeImage(); + } + + private void decodeImage(){ ThreadUtils.getCpuPool().execute(() -> { int size = AutoSizeUtils.dp2px(getContext(), 120); BitmapFactory.Options opts = new BitmapFactory.Options(); @@ -259,21 +266,31 @@ public class SlidePanelView extends View { lastX = 0; } - @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 画背景 - canvas.drawRoundRect(bgRectF, (float) getHeight() / 2, (float) getHeight() / 2, bgPaint); + canvas.drawRoundRect(bgRectF, (float) getHeight() / 2.0f, (float) getHeight() / 2.0f, bgPaint); // 画文字 gradientMatrix.setTranslate(matrixTranslate, 0); textGradient.setLocalMatrix(gradientMatrix); - if(bmBlock!=null) { - canvas.save(); - canvas.drawText(blockText, (float) (blockWidth + BLOCK_START_X + textMarginLeft), (float) textOffset, textPaint); - canvas.restore(); - // 画滑块 - canvas.drawBitmap(bmBlock, (float) (BLOCK_START_X + blockOffset), (float) BLOCK_START_Y, blockPaint); + canvas.save(); + canvas.drawText(blockText, (float) (blockWidth + BLOCK_START_X + textMarginLeft), (float) textOffset, textPaint); + canvas.restore(); + if (bmBlock != null) { + if(bmBlock.getByteCount()>=5*1024*1024){ + OchChainLogManager.writeChainLog("崩溃兜底策略", + "图片大小监听"+ ConvertUtils.byte2FitMemorySize(bmBlock.getByteCount()),true,OchChainLogManager.EVENT_KEY_INFE_ERROR); + bmBlock.recycle(); + bmBlock = null; + blockWidth = 0; + decodeImage(); + }else { + // 画滑块 + canvas.drawBitmap(bmBlock, (float) (BLOCK_START_X + blockOffset), (float) BLOCK_START_Y, blockPaint); + CallerLogger.d(TAG,"图片大小监听"+ ConvertUtils.byte2FitMemorySize(bmBlock.getByteCount())); + } } + } public interface OnSlidePanelMoveToEndListener { diff --git a/OCH/bus/driver/src/main/res/drawable/bus_base_slide_block.png b/OCH/shuttle/driver/src/main/res/drawable-nodpi/bus_base_slide_block.png similarity index 100% rename from OCH/bus/driver/src/main/res/drawable/bus_base_slide_block.png rename to OCH/shuttle/driver/src/main/res/drawable-nodpi/bus_base_slide_block.png diff --git a/OCH/shuttle/driver/src/main/res/drawable-xhdpi/bus_base_slide_block.png b/OCH/shuttle/driver/src/main/res/drawable-xhdpi/bus_base_slide_block.png deleted file mode 100644 index ed7b293b90817473c775392fe3ad51d4d7f11d24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4933 zcmV-L6T0k)P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91c%TCS1ONa40RR91cmMzZ00`n$?f?K1uSrBfRCodHoePi@$9c!U+1)$1 z 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 DCiI-Y diff --git a/OCH/shuttle/driver/src/main/res/drawable/bus_base_slide_block.png b/OCH/shuttle/driver/src/main/res/drawable/bus_base_slide_block.png deleted file mode 100644 index ed7b293b90817473c775392fe3ad51d4d7f11d24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4933 zcmV-L6T0k)P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91c%TCS1ONa40RR91cmMzZ00`n$?f?K1uSrBfRCodHoePi@$9c!U+1)$1 z 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 DCiI-Y