diff options
| author | 2022-09-13 10:26:10 +0800 | |
|---|---|---|
| committer | 2022-11-02 10:25:26 +0800 | |
| commit | 2dd9562c555c4af75b199ef5df6ee04ddfa544e9 (patch) | |
| tree | a8e0190111fe6b5f02c3679b6f7997afa0ddf6a8 | |
| parent | 05661cbbde270406e1fb1e94213fafaec679ca61 (diff) | |
Make sure view is laid out before calling createBitmap
This CL contains two fixes:
- Make sure view is laid out before calling createBitmap.
- Organize some field declarations.
Bug: 246412041
Test: manual
Change-Id: Icd5637086b3935afe89743472e68bbd3a6102222
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/qrcode/QrDecorateView.java | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/qrcode/QrDecorateView.java b/packages/SettingsLib/src/com/android/settingslib/qrcode/QrDecorateView.java index 51cf59c25502..ac9cdacec598 100644 --- a/packages/SettingsLib/src/com/android/settingslib/qrcode/QrDecorateView.java +++ b/packages/SettingsLib/src/com/android/settingslib/qrcode/QrDecorateView.java @@ -34,16 +34,16 @@ public class QrDecorateView extends View { private static final float CORNER_LINE_LENGTH = 264f; // 264dp private static final float CORNER_RADIUS = 16f; // 16dp - final private int mCornerColor; - final private int mFocusedCornerColor; - final private int mBackgroundColor; + private final int mCornerColor; + private final int mFocusedCornerColor; + private final int mBackgroundColor; - final private Paint mStrokePaint; - final private Paint mTransparentPaint; - final private Paint mBackgroundPaint; + private final Paint mStrokePaint; + private final Paint mTransparentPaint; + private final Paint mBackgroundPaint; - final private float mRadius; - final private float mInnerRidus; + private final float mRadius; + private final float mInnerRadius; private Bitmap mMaskBitmap; private Canvas mMaskCanvas; @@ -72,7 +72,7 @@ public class QrDecorateView extends View { mRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, CORNER_RADIUS, getResources().getDisplayMetrics()); // Inner radius needs to minus stroke width for keeping the width of border consistent. - mInnerRidus = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, + mInnerRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, CORNER_RADIUS - CORNER_STROKE_WIDTH, getResources().getDisplayMetrics()); mCornerColor = context.getResources().getColor(R.color.qr_corner_line_color); @@ -95,7 +95,10 @@ public class QrDecorateView extends View { protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); - if(mMaskBitmap == null) { + if (!isLaidOut()) { + return; + } + if (mMaskBitmap == null) { mMaskBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); mMaskCanvas = new Canvas(mMaskBitmap); } @@ -105,16 +108,18 @@ public class QrDecorateView extends View { @Override protected void onDraw(Canvas canvas) { - // Set frame line color. - mStrokePaint.setColor(mFocused ? mFocusedCornerColor : mCornerColor); - // Draw background color. - mMaskCanvas.drawColor(mBackgroundColor); - // Draw outer corner. - mMaskCanvas.drawRoundRect(mOuterFrame, mRadius, mRadius, mStrokePaint); - // Draw inner transparent corner. - mMaskCanvas.drawRoundRect(mInnerFrame, mInnerRidus, mInnerRidus, mTransparentPaint); - - canvas.drawBitmap(mMaskBitmap, 0, 0, mBackgroundPaint); + if (mMaskCanvas != null && mMaskBitmap != null) { + // Set frame line color. + mStrokePaint.setColor(mFocused ? mFocusedCornerColor : mCornerColor); + // Draw background color. + mMaskCanvas.drawColor(mBackgroundColor); + // Draw outer corner. + mMaskCanvas.drawRoundRect(mOuterFrame, mRadius, mRadius, mStrokePaint); + // Draw inner transparent corner. + mMaskCanvas.drawRoundRect(mInnerFrame, mInnerRadius, mInnerRadius, mTransparentPaint); + + canvas.drawBitmap(mMaskBitmap, 0, 0, mBackgroundPaint); + } super.onDraw(canvas); } |