Merge "Make sure view is laid out before calling createBitmap" am: 13b8faaaa1
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2216261 Change-Id: I3a331964b60784bb3f4d5bbcd32b55c87a330e45 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -34,16 +34,16 @@ public class QrDecorateView extends View {
|
|||||||
private static final float CORNER_LINE_LENGTH = 264f; // 264dp
|
private static final float CORNER_LINE_LENGTH = 264f; // 264dp
|
||||||
private static final float CORNER_RADIUS = 16f; // 16dp
|
private static final float CORNER_RADIUS = 16f; // 16dp
|
||||||
|
|
||||||
final private int mCornerColor;
|
private final int mCornerColor;
|
||||||
final private int mFocusedCornerColor;
|
private final int mFocusedCornerColor;
|
||||||
final private int mBackgroundColor;
|
private final int mBackgroundColor;
|
||||||
|
|
||||||
final private Paint mStrokePaint;
|
private final Paint mStrokePaint;
|
||||||
final private Paint mTransparentPaint;
|
private final Paint mTransparentPaint;
|
||||||
final private Paint mBackgroundPaint;
|
private final Paint mBackgroundPaint;
|
||||||
|
|
||||||
final private float mRadius;
|
private final float mRadius;
|
||||||
final private float mInnerRidus;
|
private final float mInnerRadius;
|
||||||
|
|
||||||
private Bitmap mMaskBitmap;
|
private Bitmap mMaskBitmap;
|
||||||
private Canvas mMaskCanvas;
|
private Canvas mMaskCanvas;
|
||||||
@@ -72,7 +72,7 @@ public class QrDecorateView extends View {
|
|||||||
mRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, CORNER_RADIUS,
|
mRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, CORNER_RADIUS,
|
||||||
getResources().getDisplayMetrics());
|
getResources().getDisplayMetrics());
|
||||||
// Inner radius needs to minus stroke width for keeping the width of border consistent.
|
// 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());
|
CORNER_RADIUS - CORNER_STROKE_WIDTH, getResources().getDisplayMetrics());
|
||||||
|
|
||||||
mCornerColor = context.getResources().getColor(R.color.qr_corner_line_color);
|
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) {
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||||
super.onLayout(changed, left, top, right, 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);
|
mMaskBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
|
||||||
mMaskCanvas = new Canvas(mMaskBitmap);
|
mMaskCanvas = new Canvas(mMaskBitmap);
|
||||||
}
|
}
|
||||||
@@ -105,6 +108,7 @@ public class QrDecorateView extends View {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDraw(Canvas canvas) {
|
protected void onDraw(Canvas canvas) {
|
||||||
|
if (mMaskCanvas != null && mMaskBitmap != null) {
|
||||||
// Set frame line color.
|
// Set frame line color.
|
||||||
mStrokePaint.setColor(mFocused ? mFocusedCornerColor : mCornerColor);
|
mStrokePaint.setColor(mFocused ? mFocusedCornerColor : mCornerColor);
|
||||||
// Draw background color.
|
// Draw background color.
|
||||||
@@ -112,9 +116,10 @@ public class QrDecorateView extends View {
|
|||||||
// Draw outer corner.
|
// Draw outer corner.
|
||||||
mMaskCanvas.drawRoundRect(mOuterFrame, mRadius, mRadius, mStrokePaint);
|
mMaskCanvas.drawRoundRect(mOuterFrame, mRadius, mRadius, mStrokePaint);
|
||||||
// Draw inner transparent corner.
|
// Draw inner transparent corner.
|
||||||
mMaskCanvas.drawRoundRect(mInnerFrame, mInnerRidus, mInnerRidus, mTransparentPaint);
|
mMaskCanvas.drawRoundRect(mInnerFrame, mInnerRadius, mInnerRadius, mTransparentPaint);
|
||||||
|
|
||||||
canvas.drawBitmap(mMaskBitmap, 0, 0, mBackgroundPaint);
|
canvas.drawBitmap(mMaskBitmap, 0, 0, mBackgroundPaint);
|
||||||
|
}
|
||||||
super.onDraw(canvas);
|
super.onDraw(canvas);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user