From 5757c151922ee148fdcc6afa33fbbe31e7f8a840 Mon Sep 17 00:00:00 2001 From: Albin POIGNOT Date: Mon, 20 Mar 2017 17:02:25 -0400 Subject: [PATCH 1/7] * Add attrs to be used in BarcodeScannerView * Pass the new attrs to ViewFinderView * Fix drawing lines issues (small offset on each corners) --- .../core/BarcodeScannerView.java | 25 ++++++++++++- .../barcodescanner/core/ViewFinderView.java | 37 +++++++++++++------ core/src/main/res/values/attrs.xml | 8 +++- 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java b/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java index 0b5733fe..bf174497 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java @@ -5,6 +5,7 @@ import android.graphics.Color; import android.graphics.Rect; import android.hardware.Camera; +import android.support.annotation.ColorInt; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; @@ -12,6 +13,7 @@ import android.widget.RelativeLayout; public abstract class BarcodeScannerView extends FrameLayout implements Camera.PreviewCallback { + private CameraWrapper mCameraWrapper; private CameraPreview mPreview; private IViewFinder mViewFinderView; @@ -21,6 +23,13 @@ public abstract class BarcodeScannerView extends FrameLayout implements Camera.P private boolean mAutofocusState = true; private boolean mShouldScaleToFill = true; + private boolean mIsLaserEnabled = true; + private int mBorderWidth = getResources().getInteger(R.integer.viewfinder_border_width); + private int mBorderLength = getResources().getInteger(R.integer.viewfinder_border_length); + private int mMaskColor = getResources().getColor(R.color.viewfinder_mask); + @ColorInt private int mBorderColor = getResources().getColor(R.color.viewfinder_border); + @ColorInt private int mLaserColor = getResources().getColor(R.color.viewfinder_laser); + public BarcodeScannerView(Context context) { super(context); } @@ -34,6 +43,12 @@ public BarcodeScannerView(Context context, AttributeSet attributeSet) { try { setShouldScaleToFill(a.getBoolean(R.styleable.BarcodeScannerView_shouldScaleToFill, true)); + mLaserColor = a.getColor(R.styleable.BarcodeScannerView_laserColor, mLaserColor); + mBorderColor = a.getColor(R.styleable.BarcodeScannerView_borderColor, mBorderColor); + mMaskColor = a.getColor(R.styleable.BarcodeScannerView_maskColor, mMaskColor); + mIsLaserEnabled = a.getBoolean(R.styleable.BarcodeScannerView_laserEnabled, mIsLaserEnabled); + mBorderWidth = a.getDimensionPixelSize(R.styleable.BarcodeScannerView_borderWidth, mBorderWidth); + mBorderLength = a.getDimensionPixelSize(R.styleable.BarcodeScannerView_borderLength, mBorderLength); } finally { a.recycle(); } @@ -71,7 +86,14 @@ public final void setupLayout(CameraWrapper cameraWrapper) { * @return {@link android.view.View} that implements {@link ViewFinderView} */ protected IViewFinder createViewFinderView(Context context) { - return new ViewFinderView(context); + ViewFinderView viewFinderView = new ViewFinderView(context); + viewFinderView.setBorderColor(mBorderColor); + viewFinderView.setLaserColor(mLaserColor); + viewFinderView.setLaserEnabled(mIsLaserEnabled); + viewFinderView.setBorderStrokeWidth(mBorderWidth); + viewFinderView.setBorderLineLength(mBorderLength); + viewFinderView.setMaskColor(mMaskColor); + return viewFinderView; } public void startCamera(int cameraId) { @@ -203,3 +225,4 @@ public void setShouldScaleToFill(boolean shouldScaleToFill) { mShouldScaleToFill = shouldScaleToFill; } } + diff --git a/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java b/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java index deb85b12..31f096c3 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java @@ -39,14 +39,15 @@ public class ViewFinderView extends View implements IViewFinder { protected Paint mBorderPaint; protected int mBorderLineLength; protected boolean mSquareViewFinder; + private boolean mIsLaserEnabled; public ViewFinderView(Context context) { super(context); init(); } - public ViewFinderView(Context context, AttributeSet attrs) { - super(context, attrs); + public ViewFinderView(Context context, AttributeSet attributeSet) { + super(context, attributeSet); init(); } @@ -67,6 +68,7 @@ private void init() { mBorderPaint.setStrokeWidth(mDefaultBorderStrokeWidth); mBorderLineLength = mDefaultBorderLineLength; + mBorderLineLength = 120; } public void setLaserColor(int laserColor) { @@ -84,6 +86,7 @@ public void setBorderStrokeWidth(int borderStrokeWidth) { public void setBorderLineLength(int borderLineLength) { mBorderLineLength = borderLineLength; } + public void setLaserEnabled(boolean isLaserEnabled) { mIsLaserEnabled = isLaserEnabled; } // TODO: Need a better way to configure this. Revisit when working on 2.0 public void setSquareViewFinder(boolean set) { @@ -107,7 +110,10 @@ public void onDraw(Canvas canvas) { drawViewFinderMask(canvas); drawViewFinderBorder(canvas); - drawLaser(canvas); + + if (mIsLaserEnabled) { + drawLaser(canvas); + } } public void drawViewFinderMask(Canvas canvas) { @@ -123,18 +129,24 @@ public void drawViewFinderMask(Canvas canvas) { public void drawViewFinderBorder(Canvas canvas) { Rect framingRect = getFramingRect(); - - canvas.drawLine(framingRect.left - 1, framingRect.top - 1, framingRect.left - 1, framingRect.top - 1 + mBorderLineLength, mBorderPaint); - canvas.drawLine(framingRect.left - 1, framingRect.top - 1, framingRect.left - 1 + mBorderLineLength, framingRect.top - 1, mBorderPaint); - canvas.drawLine(framingRect.left - 1, framingRect.bottom + 1, framingRect.left - 1, framingRect.bottom + 1 - mBorderLineLength, mBorderPaint); - canvas.drawLine(framingRect.left - 1, framingRect.bottom + 1, framingRect.left - 1 + mBorderLineLength, framingRect.bottom + 1, mBorderPaint); + float offset = mBorderPaint.getStrokeWidth() / 2; - canvas.drawLine(framingRect.right + 1, framingRect.top - 1, framingRect.right + 1, framingRect.top - 1 + mBorderLineLength, mBorderPaint); - canvas.drawLine(framingRect.right + 1, framingRect.top - 1, framingRect.right + 1 - mBorderLineLength, framingRect.top - 1, mBorderPaint); + // Top-left corner + canvas.drawLine(framingRect.left - offset, framingRect.top, framingRect.left + mBorderLineLength - offset, framingRect.top, mBorderPaint); + canvas.drawLine(framingRect.left, framingRect.top, framingRect.left, framingRect.top + mBorderLineLength, mBorderPaint); - canvas.drawLine(framingRect.right + 1, framingRect.bottom + 1, framingRect.right + 1, framingRect.bottom + 1 - mBorderLineLength, mBorderPaint); - canvas.drawLine(framingRect.right + 1, framingRect.bottom + 1, framingRect.right + 1 - mBorderLineLength, framingRect.bottom + 1, mBorderPaint); + // Top-right corner + canvas.drawLine(framingRect.right + offset, framingRect.top, framingRect.right - mBorderLineLength + offset, framingRect.top, mBorderPaint); + canvas.drawLine(framingRect.right, framingRect.top, framingRect.right, framingRect.top + mBorderLineLength, mBorderPaint); + + // Bottom-right corner + canvas.drawLine(framingRect.right + offset, framingRect.bottom, framingRect.right - mBorderLineLength + offset, framingRect.bottom, mBorderPaint); + canvas.drawLine(framingRect.right, framingRect.bottom, framingRect.right, framingRect.bottom - mBorderLineLength, mBorderPaint); + + // Bottom-left corner + canvas.drawLine(framingRect.left - offset, framingRect.bottom, framingRect.left + mBorderLineLength - offset, framingRect.bottom, mBorderPaint); + canvas.drawLine(framingRect.left, framingRect.bottom, framingRect.left, framingRect.bottom - mBorderLineLength, mBorderPaint); } public void drawLaser(Canvas canvas) { @@ -195,3 +207,4 @@ public synchronized void updateFramingRect() { mFramingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height); } } + diff --git a/core/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml index d762e925..50748d60 100644 --- a/core/src/main/res/values/attrs.xml +++ b/core/src/main/res/values/attrs.xml @@ -2,5 +2,11 @@ + + + + + + - \ No newline at end of file +⏎ From 426e65c3c55765a800b5b09cf2f126692be71c2f Mon Sep 17 00:00:00 2001 From: Albin Poignot Date: Mon, 20 Mar 2017 17:39:33 -0400 Subject: [PATCH 2/7] Removed typo --- core/src/main/res/values/attrs.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml index 50748d60..aaea184d 100644 --- a/core/src/main/res/values/attrs.xml +++ b/core/src/main/res/values/attrs.xml @@ -9,4 +9,4 @@ -⏎ + From 64ff7b592985e544ad3e7b3b3aa1366415511ed2 Mon Sep 17 00:00:00 2001 From: Albin POIGNOT Date: Wed, 22 Mar 2017 11:00:14 -0400 Subject: [PATCH 3/7] Make the ViewFinderView customizable by code --- .../core/BarcodeScannerView.java | 33 ++++++++++++++++++- .../dm7/barcodescanner/core/IViewFinder.java | 7 ++++ .../barcodescanner/core/ViewFinderView.java | 11 +++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java b/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java index bf174497..8bf5a181 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java @@ -32,6 +32,7 @@ public abstract class BarcodeScannerView extends FrameLayout implements Camera.P public BarcodeScannerView(Context context) { super(context); + init(); } public BarcodeScannerView(Context context, AttributeSet attributeSet) { @@ -52,6 +53,12 @@ public BarcodeScannerView(Context context, AttributeSet attributeSet) { } finally { a.recycle(); } + + init(); + } + + private void init() { + mViewFinderView = createViewFinderView(getContext()); } public final void setupLayout(CameraWrapper cameraWrapper) { @@ -69,7 +76,6 @@ public final void setupLayout(CameraWrapper cameraWrapper) { addView(mPreview); } - mViewFinderView = createViewFinderView(getContext()); if (mViewFinderView instanceof View) { addView((View) mViewFinderView); } else { @@ -96,6 +102,31 @@ protected IViewFinder createViewFinderView(Context context) { return viewFinderView; } + public void setLaserColor(int laserColor) { + mViewFinderView.setLaserColor(laserColor); + mViewFinderView.setupViewFinder(); + } + public void setMaskColor(int maskColor) { + mViewFinderView.setMaskColor(maskColor); + mViewFinderView.setupViewFinder(); + } + public void setBorderColor(int borderColor) { + mViewFinderView.setBorderColor(borderColor); + mViewFinderView.setupViewFinder(); + } + public void setBorderStrokeWidth(int borderStrokeWidth) { + mViewFinderView.setBorderStrokeWidth(borderStrokeWidth); + mViewFinderView.setupViewFinder(); + } + public void setBorderLineLength(int borderLineLength) { + mViewFinderView.setBorderLineLength(borderLineLength); + mViewFinderView.setupViewFinder(); + } + public void setLaserEnabled(boolean isLaserEnabled) { + mViewFinderView.setLaserEnabled(isLaserEnabled); + mViewFinderView.setupViewFinder(); + } + public void startCamera(int cameraId) { if(mCameraHandlerThread == null) { mCameraHandlerThread = new CameraHandlerThread(this); diff --git a/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java b/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java index 78c3ee4b..1ed7826c 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java @@ -3,6 +3,13 @@ import android.graphics.Rect; public interface IViewFinder { + + void setLaserColor(int laserColor); + void setMaskColor(int maskColor); + void setBorderColor(int borderColor); + void setBorderStrokeWidth(int borderStrokeWidth); + void setBorderLineLength(int borderLineLength); + void setLaserEnabled(boolean isLaserEnabled); /** * Method that executes when Camera preview is starting. * It is recommended to update framing rect here and invalidate view after that.
diff --git a/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java b/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java index 31f096c3..6cf65fa4 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java @@ -71,21 +71,32 @@ private void init() { mBorderLineLength = 120; } + @Override public void setLaserColor(int laserColor) { mLaserPaint.setColor(laserColor); } + + @Override public void setMaskColor(int maskColor) { mFinderMaskPaint.setColor(maskColor); } + + @Override public void setBorderColor(int borderColor) { mBorderPaint.setColor(borderColor); } + + @Override public void setBorderStrokeWidth(int borderStrokeWidth) { mBorderPaint.setStrokeWidth(borderStrokeWidth); } + + @Override public void setBorderLineLength(int borderLineLength) { mBorderLineLength = borderLineLength; } + + @Override public void setLaserEnabled(boolean isLaserEnabled) { mIsLaserEnabled = isLaserEnabled; } // TODO: Need a better way to configure this. Revisit when working on 2.0 From f7873005435677f5719941cca15b5675f28a60b6 Mon Sep 17 00:00:00 2001 From: Albin POIGNOT Date: Wed, 22 Mar 2017 12:30:59 -0400 Subject: [PATCH 4/7] Use Path instead of lines to draw view finder borders --- .../barcodescanner/core/ViewFinderView.java | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java b/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java index 6cf65fa4..30f4fcbb 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java @@ -4,6 +4,7 @@ import android.content.res.Configuration; import android.graphics.Canvas; import android.graphics.Paint; +import android.graphics.Path; import android.graphics.Point; import android.graphics.Rect; import android.util.AttributeSet; @@ -141,23 +142,30 @@ public void drawViewFinderMask(Canvas canvas) { public void drawViewFinderBorder(Canvas canvas) { Rect framingRect = getFramingRect(); - float offset = mBorderPaint.getStrokeWidth() / 2; - // Top-left corner - canvas.drawLine(framingRect.left - offset, framingRect.top, framingRect.left + mBorderLineLength - offset, framingRect.top, mBorderPaint); - canvas.drawLine(framingRect.left, framingRect.top, framingRect.left, framingRect.top + mBorderLineLength, mBorderPaint); + Path path = new Path(); + path.moveTo(framingRect.left, framingRect.top + mBorderLineLength); + path.lineTo(framingRect.left, framingRect.top); + path.lineTo(framingRect.left + mBorderLineLength, framingRect.top); + canvas.drawPath(path, mBorderPaint); // Top-right corner - canvas.drawLine(framingRect.right + offset, framingRect.top, framingRect.right - mBorderLineLength + offset, framingRect.top, mBorderPaint); - canvas.drawLine(framingRect.right, framingRect.top, framingRect.right, framingRect.top + mBorderLineLength, mBorderPaint); + path.moveTo(framingRect.right, framingRect.top + mBorderLineLength); + path.lineTo(framingRect.right, framingRect.top); + path.lineTo(framingRect.right - mBorderLineLength, framingRect.top); + canvas.drawPath(path, mBorderPaint); // Bottom-right corner - canvas.drawLine(framingRect.right + offset, framingRect.bottom, framingRect.right - mBorderLineLength + offset, framingRect.bottom, mBorderPaint); - canvas.drawLine(framingRect.right, framingRect.bottom, framingRect.right, framingRect.bottom - mBorderLineLength, mBorderPaint); + path.moveTo(framingRect.right, framingRect.bottom - mBorderLineLength); + path.lineTo(framingRect.right, framingRect.bottom); + path.lineTo(framingRect.right - mBorderLineLength, framingRect.bottom); + canvas.drawPath(path, mBorderPaint); // Bottom-left corner - canvas.drawLine(framingRect.left - offset, framingRect.bottom, framingRect.left + mBorderLineLength - offset, framingRect.bottom, mBorderPaint); - canvas.drawLine(framingRect.left, framingRect.bottom, framingRect.left, framingRect.bottom - mBorderLineLength, mBorderPaint); + path.moveTo(framingRect.left, framingRect.bottom - mBorderLineLength); + path.lineTo(framingRect.left, framingRect.bottom); + path.lineTo(framingRect.left + mBorderLineLength, framingRect.bottom); + canvas.drawPath(path, mBorderPaint); } public void drawLaser(Canvas canvas) { From 240b2b0ff6d075cdb94474343d9f21758c6fab20 Mon Sep 17 00:00:00 2001 From: Albin POIGNOT Date: Wed, 22 Mar 2017 15:52:05 -0400 Subject: [PATCH 5/7] Add more customizations for ViewFinder --- .../core/BarcodeScannerView.java | 54 +++++++++++++++---- .../dm7/barcodescanner/core/IViewFinder.java | 4 ++ .../barcodescanner/core/ViewFinderView.java | 18 ++++++- core/src/main/res/values/attrs.xml | 3 ++ 4 files changed, 68 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java b/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java index 8bf5a181..f92692e4 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java @@ -24,11 +24,14 @@ public abstract class BarcodeScannerView extends FrameLayout implements Camera.P private boolean mShouldScaleToFill = true; private boolean mIsLaserEnabled = true; + @ColorInt private int mLaserColor = getResources().getColor(R.color.viewfinder_laser); + @ColorInt private int mBorderColor = getResources().getColor(R.color.viewfinder_border); + private int mMaskColor = getResources().getColor(R.color.viewfinder_mask); private int mBorderWidth = getResources().getInteger(R.integer.viewfinder_border_width); private int mBorderLength = getResources().getInteger(R.integer.viewfinder_border_length); - private int mMaskColor = getResources().getColor(R.color.viewfinder_mask); - @ColorInt private int mBorderColor = getResources().getColor(R.color.viewfinder_border); - @ColorInt private int mLaserColor = getResources().getColor(R.color.viewfinder_laser); + private boolean mRoundedCorner = false; + private int mCornerRadius = 0; + private boolean mSquaredFinder = false; public BarcodeScannerView(Context context) { super(context); @@ -37,6 +40,7 @@ public BarcodeScannerView(Context context) { public BarcodeScannerView(Context context, AttributeSet attributeSet) { super(context, attributeSet); + TypedArray a = context.getTheme().obtainStyledAttributes( attributeSet, R.styleable.BarcodeScannerView, @@ -44,12 +48,16 @@ public BarcodeScannerView(Context context, AttributeSet attributeSet) { try { setShouldScaleToFill(a.getBoolean(R.styleable.BarcodeScannerView_shouldScaleToFill, true)); + mIsLaserEnabled = a.getBoolean(R.styleable.BarcodeScannerView_laserEnabled, mIsLaserEnabled); mLaserColor = a.getColor(R.styleable.BarcodeScannerView_laserColor, mLaserColor); mBorderColor = a.getColor(R.styleable.BarcodeScannerView_borderColor, mBorderColor); mMaskColor = a.getColor(R.styleable.BarcodeScannerView_maskColor, mMaskColor); - mIsLaserEnabled = a.getBoolean(R.styleable.BarcodeScannerView_laserEnabled, mIsLaserEnabled); mBorderWidth = a.getDimensionPixelSize(R.styleable.BarcodeScannerView_borderWidth, mBorderWidth); mBorderLength = a.getDimensionPixelSize(R.styleable.BarcodeScannerView_borderLength, mBorderLength); + + mRoundedCorner = a.getBoolean(R.styleable.BarcodeScannerView_roundedCorner, mRoundedCorner); + mCornerRadius = a.getDimensionPixelSize(R.styleable.BarcodeScannerView_cornerRadius, mCornerRadius); + mSquaredFinder = a.getBoolean(R.styleable.BarcodeScannerView_squaredFinder, mSquaredFinder); } finally { a.recycle(); } @@ -99,33 +107,59 @@ protected IViewFinder createViewFinderView(Context context) { viewFinderView.setBorderStrokeWidth(mBorderWidth); viewFinderView.setBorderLineLength(mBorderLength); viewFinderView.setMaskColor(mMaskColor); + + viewFinderView.setBorderCornerRounded(mRoundedCorner); + viewFinderView.setBorderCornerRadius(mCornerRadius); + viewFinderView.setSquareViewFinder(mSquaredFinder); return viewFinderView; } public void setLaserColor(int laserColor) { - mViewFinderView.setLaserColor(laserColor); + mLaserColor = laserColor; + mViewFinderView.setLaserColor(mLaserColor); mViewFinderView.setupViewFinder(); } public void setMaskColor(int maskColor) { - mViewFinderView.setMaskColor(maskColor); + mMaskColor = maskColor; + mViewFinderView.setMaskColor(mMaskColor); mViewFinderView.setupViewFinder(); } public void setBorderColor(int borderColor) { - mViewFinderView.setBorderColor(borderColor); + mBorderColor = borderColor; + mViewFinderView.setBorderColor(mBorderColor); mViewFinderView.setupViewFinder(); } public void setBorderStrokeWidth(int borderStrokeWidth) { - mViewFinderView.setBorderStrokeWidth(borderStrokeWidth); + mBorderWidth = borderStrokeWidth; + mViewFinderView.setBorderStrokeWidth(mBorderWidth); mViewFinderView.setupViewFinder(); } public void setBorderLineLength(int borderLineLength) { - mViewFinderView.setBorderLineLength(borderLineLength); + mBorderLength = borderLineLength; + mViewFinderView.setBorderLineLength(mBorderLength); mViewFinderView.setupViewFinder(); } public void setLaserEnabled(boolean isLaserEnabled) { - mViewFinderView.setLaserEnabled(isLaserEnabled); + mIsLaserEnabled = isLaserEnabled; + mViewFinderView.setLaserEnabled(mIsLaserEnabled); mViewFinderView.setupViewFinder(); } + public void setIsBorderCornerRounded(boolean isBorderCornerRounded) { + mRoundedCorner = isBorderCornerRounded; + mViewFinderView.setBorderCornerRounded(mRoundedCorner); + mViewFinderView.setupViewFinder(); + } + public void setBorderCornerRadius(int borderCornerRadius) { + mCornerRadius = borderCornerRadius; + mViewFinderView.setBorderCornerRadius(mCornerRadius); + mViewFinderView.setupViewFinder(); + } + public void setSquareViewFinder(boolean isSquareViewFinder) { + mSquaredFinder = isSquareViewFinder; + mViewFinderView.setSquareViewFinder(mSquaredFinder); + mViewFinderView.setupViewFinder(); + } + public void startCamera(int cameraId) { if(mCameraHandlerThread == null) { diff --git a/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java b/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java index 1ed7826c..077d97fc 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java @@ -10,6 +10,10 @@ public interface IViewFinder { void setBorderStrokeWidth(int borderStrokeWidth); void setBorderLineLength(int borderLineLength); void setLaserEnabled(boolean isLaserEnabled); + + void setBorderCornerRounded(boolean isBorderCornersRounded); + void setBorderCornerRadius(int borderCornersRadius); + void setSquareViewFinder(boolean isSquareViewFinder); /** * Method that executes when Camera preview is starting. * It is recommended to update framing rect here and invalidate view after that.
diff --git a/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java b/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java index 30f4fcbb..adf08d24 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java @@ -3,6 +3,7 @@ import android.content.Context; import android.content.res.Configuration; import android.graphics.Canvas; +import android.graphics.CornerPathEffect; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; @@ -67,9 +68,9 @@ private void init() { mBorderPaint.setColor(mDefaultBorderColor); mBorderPaint.setStyle(Paint.Style.STROKE); mBorderPaint.setStrokeWidth(mDefaultBorderStrokeWidth); + mBorderPaint.setAntiAlias(true); mBorderLineLength = mDefaultBorderLineLength; - mBorderLineLength = 120; } @Override @@ -100,7 +101,22 @@ public void setBorderLineLength(int borderLineLength) { @Override public void setLaserEnabled(boolean isLaserEnabled) { mIsLaserEnabled = isLaserEnabled; } + @Override + public void setBorderCornerRounded(boolean isBorderCornersRounded) { + if (isBorderCornersRounded) { + mBorderPaint.setStrokeJoin(Paint.Join.ROUND); + } else { + mBorderPaint.setStrokeJoin(Paint.Join.BEVEL); + } + } + + @Override + public void setBorderCornerRadius(int borderCornersRadius) { + mBorderPaint.setPathEffect(new CornerPathEffect(borderCornersRadius)); + } + // TODO: Need a better way to configure this. Revisit when working on 2.0 + @Override public void setSquareViewFinder(boolean set) { mSquareViewFinder = set; } diff --git a/core/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml index aaea184d..b8a92aaf 100644 --- a/core/src/main/res/values/attrs.xml +++ b/core/src/main/res/values/attrs.xml @@ -8,5 +8,8 @@ + + + From 19f11dfc4ba1d73d053944075bd68a870d923263 Mon Sep 17 00:00:00 2001 From: Albin POIGNOT Date: Wed, 22 Mar 2017 18:12:03 -0400 Subject: [PATCH 6/7] Add the possibility to customize the borders alpha --- .../me/dm7/barcodescanner/core/BarcodeScannerView.java | 8 +++++++- .../main/java/me/dm7/barcodescanner/core/IViewFinder.java | 1 + .../java/me/dm7/barcodescanner/core/ViewFinderView.java | 7 +++++++ core/src/main/res/values/attrs.xml | 1 + 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java b/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java index f92692e4..91138848 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java @@ -32,6 +32,7 @@ public abstract class BarcodeScannerView extends FrameLayout implements Camera.P private boolean mRoundedCorner = false; private int mCornerRadius = 0; private boolean mSquaredFinder = false; + private float mBorderAlpha = 1.0f; public BarcodeScannerView(Context context) { super(context); @@ -58,6 +59,7 @@ public BarcodeScannerView(Context context, AttributeSet attributeSet) { mRoundedCorner = a.getBoolean(R.styleable.BarcodeScannerView_roundedCorner, mRoundedCorner); mCornerRadius = a.getDimensionPixelSize(R.styleable.BarcodeScannerView_cornerRadius, mCornerRadius); mSquaredFinder = a.getBoolean(R.styleable.BarcodeScannerView_squaredFinder, mSquaredFinder); + mBorderAlpha = a.getFloat(R.styleable.BarcodeScannerView_borderAlpha, mBorderAlpha); } finally { a.recycle(); } @@ -159,7 +161,11 @@ public void setSquareViewFinder(boolean isSquareViewFinder) { mViewFinderView.setSquareViewFinder(mSquaredFinder); mViewFinderView.setupViewFinder(); } - + public void setBorderAlpha(float borderAlpha) { + mBorderAlpha = borderAlpha; + mViewFinderView.setBorderAlpha(mBorderAlpha); + mViewFinderView.setupViewFinder(); + } public void startCamera(int cameraId) { if(mCameraHandlerThread == null) { diff --git a/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java b/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java index 077d97fc..fbf4161a 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java @@ -12,6 +12,7 @@ public interface IViewFinder { void setLaserEnabled(boolean isLaserEnabled); void setBorderCornerRounded(boolean isBorderCornersRounded); + void setBorderAlpha(float alpha); void setBorderCornerRadius(int borderCornersRadius); void setSquareViewFinder(boolean isSquareViewFinder); /** diff --git a/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java b/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java index adf08d24..222888ae 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java @@ -42,6 +42,7 @@ public class ViewFinderView extends View implements IViewFinder { protected int mBorderLineLength; protected boolean mSquareViewFinder; private boolean mIsLaserEnabled; + private float bordersAlpha; public ViewFinderView(Context context) { super(context); @@ -110,6 +111,12 @@ public void setBorderCornerRounded(boolean isBorderCornersRounded) { } } + @Override + public void setBorderAlpha(float alpha) { + int colorAlpha = (int) (255 * alpha); + mBorderPaint.setAlpha(colorAlpha); + } + @Override public void setBorderCornerRadius(int borderCornersRadius) { mBorderPaint.setPathEffect(new CornerPathEffect(borderCornersRadius)); diff --git a/core/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml index b8a92aaf..d58ac62a 100644 --- a/core/src/main/res/values/attrs.xml +++ b/core/src/main/res/values/attrs.xml @@ -11,5 +11,6 @@ + From 0edb6f265dd1dfafc5a98994354a9b61d3bb2b22 Mon Sep 17 00:00:00 2001 From: Albin POIGNOT Date: Thu, 23 Mar 2017 11:12:13 -0400 Subject: [PATCH 7/7] Customize View Finder offset --- .../barcodescanner/core/BarcodeScannerView.java | 3 +++ .../me/dm7/barcodescanner/core/IViewFinder.java | 1 + .../dm7/barcodescanner/core/ViewFinderView.java | 17 ++++++++++++----- core/src/main/res/values/attrs.xml | 1 + 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java b/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java index 91138848..89bc03c0 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/BarcodeScannerView.java @@ -33,6 +33,7 @@ public abstract class BarcodeScannerView extends FrameLayout implements Camera.P private int mCornerRadius = 0; private boolean mSquaredFinder = false; private float mBorderAlpha = 1.0f; + private int mViewFinderOffset = 0; public BarcodeScannerView(Context context) { super(context); @@ -60,6 +61,7 @@ public BarcodeScannerView(Context context, AttributeSet attributeSet) { mCornerRadius = a.getDimensionPixelSize(R.styleable.BarcodeScannerView_cornerRadius, mCornerRadius); mSquaredFinder = a.getBoolean(R.styleable.BarcodeScannerView_squaredFinder, mSquaredFinder); mBorderAlpha = a.getFloat(R.styleable.BarcodeScannerView_borderAlpha, mBorderAlpha); + mViewFinderOffset = a.getDimensionPixelSize(R.styleable.BarcodeScannerView_finderOffset, mViewFinderOffset); } finally { a.recycle(); } @@ -113,6 +115,7 @@ protected IViewFinder createViewFinderView(Context context) { viewFinderView.setBorderCornerRounded(mRoundedCorner); viewFinderView.setBorderCornerRadius(mCornerRadius); viewFinderView.setSquareViewFinder(mSquaredFinder); + viewFinderView.setViewFinderOffset(mViewFinderOffset); return viewFinderView; } diff --git a/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java b/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java index fbf4161a..a6caaa4c 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/IViewFinder.java @@ -14,6 +14,7 @@ public interface IViewFinder { void setBorderCornerRounded(boolean isBorderCornersRounded); void setBorderAlpha(float alpha); void setBorderCornerRadius(int borderCornersRadius); + void setViewFinderOffset(int offset); void setSquareViewFinder(boolean isSquareViewFinder); /** * Method that executes when Camera preview is starting. diff --git a/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java b/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java index 222888ae..307a8a42 100644 --- a/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java +++ b/core/src/main/java/me/dm7/barcodescanner/core/ViewFinderView.java @@ -23,7 +23,7 @@ public class ViewFinderView extends View implements IViewFinder { private static final float LANDSCAPE_WIDTH_HEIGHT_RATIO = 1.4f; private static final int MIN_DIMENSION_DIFF = 50; - private static final float SQUARE_DIMENSION_RATIO = 5f/8; + private static final float DEFAULT_SQUARE_DIMENSION_RATIO = 5f / 8; private static final int[] SCANNER_ALPHA = {0, 64, 128, 192, 255, 192, 128, 64}; private int scannerAlpha; @@ -42,7 +42,8 @@ public class ViewFinderView extends View implements IViewFinder { protected int mBorderLineLength; protected boolean mSquareViewFinder; private boolean mIsLaserEnabled; - private float bordersAlpha; + private float mBordersAlpha; + private int mViewFinderOffset = 0; public ViewFinderView(Context context) { super(context); @@ -114,6 +115,7 @@ public void setBorderCornerRounded(boolean isBorderCornersRounded) { @Override public void setBorderAlpha(float alpha) { int colorAlpha = (int) (255 * alpha); + mBordersAlpha = alpha; mBorderPaint.setAlpha(colorAlpha); } @@ -122,6 +124,11 @@ public void setBorderCornerRadius(int borderCornersRadius) { mBorderPaint.setPathEffect(new CornerPathEffect(borderCornersRadius)); } + @Override + public void setViewFinderOffset(int offset) { + mViewFinderOffset = offset; + } + // TODO: Need a better way to configure this. Revisit when working on 2.0 @Override public void setSquareViewFinder(boolean set) { @@ -220,10 +227,10 @@ public synchronized void updateFramingRect() { if(mSquareViewFinder) { if(orientation != Configuration.ORIENTATION_PORTRAIT) { - height = (int) (getHeight() * SQUARE_DIMENSION_RATIO); + height = (int) (getHeight() * DEFAULT_SQUARE_DIMENSION_RATIO); width = height; } else { - width = (int) (getWidth() * SQUARE_DIMENSION_RATIO); + width = (int) (getWidth() * DEFAULT_SQUARE_DIMENSION_RATIO); height = width; } } else { @@ -246,7 +253,7 @@ public synchronized void updateFramingRect() { int leftOffset = (viewResolution.x - width) / 2; int topOffset = (viewResolution.y - height) / 2; - mFramingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height); + mFramingRect = new Rect(leftOffset + mViewFinderOffset, topOffset + mViewFinderOffset, leftOffset + width - mViewFinderOffset, topOffset + height - mViewFinderOffset); } } diff --git a/core/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml index d58ac62a..8e7485eb 100644 --- a/core/src/main/res/values/attrs.xml +++ b/core/src/main/res/values/attrs.xml @@ -12,5 +12,6 @@ +