From b37ff2cf31aed041c1e10f562a523f6f457d3e4b Mon Sep 17 00:00:00 2001 From: zhouwenkai Date: Sat, 5 Dec 2020 23:02:54 +0800 Subject: [PATCH 1/3] Support set camera frame position(#524) --- .../src/main/res/layout/capture_appcompat.xml | 1 + sample/src/main/res/layout/capture_small.xml | 1 + .../res/values/zxing_attrs.xml | 2 ++ .../barcodescanner/CameraPreview.java | 24 +++++++++++++++++++ 4 files changed, 28 insertions(+) diff --git a/sample/src/main/res/layout/capture_appcompat.xml b/sample/src/main/res/layout/capture_appcompat.xml index 444f4119d..c62f1579c 100644 --- a/sample/src/main/res/layout/capture_appcompat.xml +++ b/sample/src/main/res/layout/capture_appcompat.xml @@ -38,6 +38,7 @@ android:layout_below="@+id/my_awesome_toolbar" android:layout_alignParentBottom="true" android:id="@+id/zxing_barcode_scanner" + app:zxing_framing_offset_y="100dp" app:zxing_use_texture_view="true"/> diff --git a/sample/src/main/res/layout/capture_small.xml b/sample/src/main/res/layout/capture_small.xml index efe2d4a2e..944e23d4c 100644 --- a/sample/src/main/res/layout/capture_small.xml +++ b/sample/src/main/res/layout/capture_small.xml @@ -33,6 +33,7 @@ android:layout_marginTop="150dp" android:layout_marginBottom="150dp" android:id="@+id/zxing_barcode_scanner" + app:zxing_framing_offset_y_ratio="0.32" app:zxing_use_texture_view="false" app:zxing_preview_scaling_strategy="fitXY"/> diff --git a/zxing-android-embedded/res/values/zxing_attrs.xml b/zxing-android-embedded/res/values/zxing_attrs.xml index 70eaece1a..e715f94da 100755 --- a/zxing-android-embedded/res/values/zxing_attrs.xml +++ b/zxing-android-embedded/res/values/zxing_attrs.xml @@ -8,6 +8,8 @@ + + diff --git a/zxing-android-embedded/src/com/journeyapps/barcodescanner/CameraPreview.java b/zxing-android-embedded/src/com/journeyapps/barcodescanner/CameraPreview.java index f96f613be..8689fd756 100644 --- a/zxing-android-embedded/src/com/journeyapps/barcodescanner/CameraPreview.java +++ b/zxing-android-embedded/src/com/journeyapps/barcodescanner/CameraPreview.java @@ -21,6 +21,9 @@ import android.view.ViewGroup; import android.view.WindowManager; +import androidx.annotation.FloatRange; +import androidx.annotation.IntRange; + import com.google.zxing.client.android.R; import com.journeyapps.barcodescanner.camera.CameraInstance; import com.journeyapps.barcodescanner.camera.CameraParametersCallback; @@ -139,6 +142,12 @@ public interface StateListener { // must be smaller than 0.5; private double marginFraction = 0.1d; + // Frame rectangle Y axis offset + private int framingOffsetY; + + // Frame rectangle Y axis offset percentage + private float framingOffsetYRatio = 0.5f; + private PreviewScalingStrategy previewScalingStrategy = null; private boolean torchOn = false; @@ -276,6 +285,13 @@ protected void initializeAttributes(AttributeSet attrs) { this.framingRectSize = new Size(framingRectWidth, framingRectHeight); } + this.framingOffsetY = styledAttributes.getDimensionPixelSize(R.styleable.zxing_camera_preview_zxing_framing_offset_y, -1); + + float framingOffsetYRatio = styledAttributes.getFloat(R.styleable.zxing_camera_preview_zxing_framing_offset_y_ratio, 0.5f); + if (framingOffsetYRatio >= 0 && framingOffsetYRatio <= 1.0) { + this.framingOffsetYRatio = framingOffsetYRatio; + } + this.useTextureView = styledAttributes.getBoolean(R.styleable.zxing_camera_preview_zxing_use_texture_view, true); // See zxing_attrs.xml for the enum values @@ -849,6 +865,14 @@ protected Rect calculateFramingRect(Rect container, Rect surface) { // We don't want a frame that is taller than wide. intersection.inset(0, (intersection.height() - intersection.width()) / 2); } + + // Y axis offset + if (framingOffsetY == -1) { + intersection.offset(0, (int) ((container.height() - intersection.height()) * (framingOffsetYRatio - 0.5f))); + } else { + intersection.offset(0, (int) (framingOffsetY - ((container.height() - intersection.height()) * 0.5f))); + } + return intersection; } From 0f9cbf4cad8f87e76bf2b4939872a7ecb36fc473 Mon Sep 17 00:00:00 2001 From: zhouwenkai Date: Sat, 5 Dec 2020 23:16:22 +0800 Subject: [PATCH 2/3] Remove unused import --- .../src/com/journeyapps/barcodescanner/CameraPreview.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/zxing-android-embedded/src/com/journeyapps/barcodescanner/CameraPreview.java b/zxing-android-embedded/src/com/journeyapps/barcodescanner/CameraPreview.java index 8689fd756..24417ec36 100644 --- a/zxing-android-embedded/src/com/journeyapps/barcodescanner/CameraPreview.java +++ b/zxing-android-embedded/src/com/journeyapps/barcodescanner/CameraPreview.java @@ -8,7 +8,6 @@ import android.graphics.Matrix; import android.graphics.Rect; import android.graphics.SurfaceTexture; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -21,9 +20,6 @@ import android.view.ViewGroup; import android.view.WindowManager; -import androidx.annotation.FloatRange; -import androidx.annotation.IntRange; - import com.google.zxing.client.android.R; import com.journeyapps.barcodescanner.camera.CameraInstance; import com.journeyapps.barcodescanner.camera.CameraParametersCallback; From 55e97e7a8fbe9263d1f5fa5fe3c005c55be57f89 Mon Sep 17 00:00:00 2001 From: zhouwenkai Date: Sun, 6 Dec 2020 11:04:42 +0800 Subject: [PATCH 3/3] Fix set camera frame position is invalid when specific size is specified --- .../com/journeyapps/barcodescanner/CameraPreview.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/zxing-android-embedded/src/com/journeyapps/barcodescanner/CameraPreview.java b/zxing-android-embedded/src/com/journeyapps/barcodescanner/CameraPreview.java index 24417ec36..98ed29830 100644 --- a/zxing-android-embedded/src/com/journeyapps/barcodescanner/CameraPreview.java +++ b/zxing-android-embedded/src/com/journeyapps/barcodescanner/CameraPreview.java @@ -284,7 +284,7 @@ protected void initializeAttributes(AttributeSet attrs) { this.framingOffsetY = styledAttributes.getDimensionPixelSize(R.styleable.zxing_camera_preview_zxing_framing_offset_y, -1); float framingOffsetYRatio = styledAttributes.getFloat(R.styleable.zxing_camera_preview_zxing_framing_offset_y_ratio, 0.5f); - if (framingOffsetYRatio >= 0 && framingOffsetYRatio <= 1.0) { + if (framingOffsetYRatio >= 0.0f && framingOffsetYRatio <= 1.0f) { this.framingOffsetYRatio = framingOffsetYRatio; } @@ -852,6 +852,14 @@ protected Rect calculateFramingRect(Rect container, Rect surface) { int horizontalMargin = Math.max(0, (intersection.width() - framingRectSize.width) / 2); int verticalMargin = Math.max(0, (intersection.height() - framingRectSize.height) / 2); intersection.inset(horizontalMargin, verticalMargin); + + // Y axis offset + if (framingOffsetY == -1) { + intersection.offset(0, (int) ((container.height() - intersection.height()) * framingOffsetYRatio - verticalMargin)); + } else { + intersection.offset(0, framingOffsetY - verticalMargin); + } + return intersection; } // margin as 10% (default) of the smaller of width, height