From aee80849cbed1282a779996ec6039981fb1bf456 Mon Sep 17 00:00:00 2001
From: maning <154292322@qq.com>
Date: Thu, 22 Apr 2021 17:11:41 +0800
Subject: [PATCH] =?UTF-8?q?=E6=89=AB=E7=A0=81=E7=BB=93=E6=9E=9C=E7=82=B9?=
=?UTF-8?q?=E5=9D=90=E6=A0=87=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../camera/CameraConfigurationManager.java | 4 +-
.../client/android/camera/CameraManager.java | 4 +
.../android/view/ScanResultPointView.java | 81 ++++++++++++-------
.../client/android/view/ScanSurfaceView.java | 12 ++-
.../client/android/view/ViewfinderView.java | 5 +-
.../res/layout/mn_scan_result_point_view.xml | 7 ++
6 files changed, 80 insertions(+), 33 deletions(-)
diff --git a/libraryzxing/src/main/java/com/google/zxing/client/android/camera/CameraConfigurationManager.java b/libraryzxing/src/main/java/com/google/zxing/client/android/camera/CameraConfigurationManager.java
index 11bf1af..ae9d8d7 100755
--- a/libraryzxing/src/main/java/com/google/zxing/client/android/camera/CameraConfigurationManager.java
+++ b/libraryzxing/src/main/java/com/google/zxing/client/android/camera/CameraConfigurationManager.java
@@ -36,7 +36,7 @@
* configure the camera hardware.
*/
@SuppressWarnings("deprecation") // camera APIs
-final class CameraConfigurationManager {
+public final class CameraConfigurationManager {
private static final String TAG = "CameraConfiguration";
@@ -176,7 +176,7 @@ Point getBestPreviewSize() {
return bestPreviewSize;
}
- Point getPreviewSizeOnScreen() {
+ public Point getPreviewSizeOnScreen() {
return previewSizeOnScreen;
}
diff --git a/libraryzxing/src/main/java/com/google/zxing/client/android/camera/CameraManager.java b/libraryzxing/src/main/java/com/google/zxing/client/android/camera/CameraManager.java
index e34c072..f0ffa96 100755
--- a/libraryzxing/src/main/java/com/google/zxing/client/android/camera/CameraManager.java
+++ b/libraryzxing/src/main/java/com/google/zxing/client/android/camera/CameraManager.java
@@ -421,4 +421,8 @@ public PlanarYUVLuminanceSource buildLuminanceSource(byte[] data, int width, int
public Camera getCamera() {
return camera.getCamera();
}
+
+ public CameraConfigurationManager getConfigManager(){
+ return configManager;
+ }
}
diff --git a/libraryzxing/src/main/java/com/google/zxing/client/android/view/ScanResultPointView.java b/libraryzxing/src/main/java/com/google/zxing/client/android/view/ScanResultPointView.java
index fa4c9f3..1c48261 100644
--- a/libraryzxing/src/main/java/com/google/zxing/client/android/view/ScanResultPointView.java
+++ b/libraryzxing/src/main/java/com/google/zxing/client/android/view/ScanResultPointView.java
@@ -1,6 +1,7 @@
package com.google.zxing.client.android.view;
import android.content.Context;
+import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Rect;
@@ -21,9 +22,11 @@
import com.google.zxing.ResultPoint;
import com.google.zxing.client.android.MNScanManager;
import com.google.zxing.client.android.R;
+import com.google.zxing.client.android.camera.CameraManager;
import com.google.zxing.client.android.model.MNScanConfig;
import com.google.zxing.client.android.utils.CommonUtils;
import com.google.zxing.client.android.utils.StatusBarUtil;
+import com.google.zxing.qrcode.detector.FinderPattern;
import static android.graphics.drawable.GradientDrawable.RECTANGLE;
@@ -39,6 +42,8 @@ public class ScanResultPointView extends FrameLayout {
private Rect cameraFrame;
private OnResultPointClickListener onResultPointClickListener;
private ScanSurfaceView scanSurfaceView;
+ private ViewfinderView viewfinderView;
+ private CameraManager cameraManager;
private int resultPointColor;
private int resultPointStrokeColor;
@@ -50,6 +55,7 @@ public class ScanResultPointView extends FrameLayout {
private FrameLayout fl_result_point_root;
private View fakeStatusBar;
private int statusBarHeight;
+ private ImageView iv_show_result;
public void setOnResultPointClickListener(OnResultPointClickListener onResultPointClickListener) {
this.onResultPointClickListener = onResultPointClickListener;
@@ -77,6 +83,7 @@ public ScanResultPointView(Context context, AttributeSet attrs, int defStyleAttr
private void initView() {
View view = LayoutInflater.from(getContext()).inflate(R.layout.mn_scan_result_point_view, this);
fakeStatusBar = view.findViewById(R.id.fakeStatusBar2);
+ iv_show_result = view.findViewById(R.id.iv_show_result);
tv_cancle = view.findViewById(R.id.tv_cancle);
rl_result_root = view.findViewById(R.id.rl_result_root);
fl_result_point_root = view.findViewById(R.id.fl_result_point_root);
@@ -120,6 +127,15 @@ public void setScanSurfaceView(ScanSurfaceView scanSurfaceView) {
this.scanSurfaceView = scanSurfaceView;
}
+ public void setViewfinderView(ViewfinderView viewfinderView) {
+ this.viewfinderView = viewfinderView;
+ }
+
+ public void setCameraManager(CameraManager cameraManager) {
+ this.cameraManager = cameraManager;
+ cameraFrame = cameraManager.getFramingRect();
+ }
+
private void initResultPointConfigs() {
if (scanConfig == null) {
@@ -152,17 +168,18 @@ private void initResultPointConfigs() {
}
- public void setCameraFrame(Rect cameraFrame) {
- this.cameraFrame = cameraFrame;
- }
+ private Bitmap barcodeBitmap;
+ private float scaleFactor;
- public void setDatas(Result[] results) {
+ public void setDatas(Result[] results, Bitmap barcode, float scaleFactor) {
this.resultPoint = results;
+ this.barcodeBitmap = barcode;
+ this.scaleFactor = scaleFactor;
drawableResultPoint();
}
public void drawableResultPoint() {
- Log.e("======", "drawableResultPoint---start");
+ Log.e(">>>>>>", "drawableResultPoint---start");
fl_result_point_root.removeAllViews();
if (resultPoint == null || resultPoint.length == 0) {
if (onResultPointClickListener != null) {
@@ -170,12 +187,12 @@ public void drawableResultPoint() {
}
return;
}
- Log.e("======", "statusBarHeight--->" + statusBarHeight);
+ Log.e(">>>>>>", "statusBarHeight--->" + statusBarHeight);
if (resizeAbleSurfaceView != null) {
- Log.e("======", "resizeAbleSurfaceView.getWidth():" + resizeAbleSurfaceView.getWidth() + ",resizeAbleSurfaceView.getHeight():" + resizeAbleSurfaceView.getHeight());
+ Log.e(">>>>>>", "resizeAbleSurfaceView.getWidth():" + resizeAbleSurfaceView.getWidth() + ",resizeAbleSurfaceView.getHeight():" + resizeAbleSurfaceView.getHeight());
}
if (scanSurfaceView != null) {
- Log.e("======", "scanSurfaceView.getWidth():" + scanSurfaceView.getWidth() + ",scanSurfaceView.getHeight():" + scanSurfaceView.getHeight());
+ Log.e(">>>>>>", "scanSurfaceView.getWidth():" + scanSurfaceView.getWidth() + ",scanSurfaceView.getHeight():" + scanSurfaceView.getHeight());
int[] location = new int[2];
scanSurfaceView.getLocationOnScreen(location);
//更新虚假状态栏高度
@@ -247,7 +264,7 @@ public void drawableResultPoint() {
float maxY = points[0].getY();
for (int j = 0; j < points.length; j++) {
ResultPoint point = points[j];
- Log.e("======", "drawableResultPoint---points :" + point.toString());
+ Log.e(">>>>>>", "drawableResultPoint---points :" + point.toString());
if (maxX < point.getX()) {
maxX = point.getX();
pointRight = point;
@@ -257,15 +274,16 @@ public void drawableResultPoint() {
pointBottom = point;
}
}
- int centerX = (int) (pointRight.getX() - (pointRight.getX() - pointBottom.getX()) / 2);
- int centerY = (int) (pointBottom.getY() - (pointBottom.getY() - pointRight.getY()) / 2);
- Point centerPoint = getCenterPoint(centerX, centerY);
+ Point realRight = getCenterPoint((int) pointRight.getX(), (int) pointRight.getY());
+ Point realBottom = getCenterPoint((int) pointBottom.getX(), (int) pointBottom.getY());
+ int centerX = (int) (realRight.x - (realRight.x - realBottom.x) / 2);
+ int centerY = (int) (realBottom.y - (realBottom.y - realRight.y) / 2);
//位置
RelativeLayout.LayoutParams lpRoot = new RelativeLayout.LayoutParams(resultPointWithdHeight, resultPointWithdHeight);
rl_root.setLayoutParams(lpRoot);
- rl_root.setX(centerPoint.x);
- rl_root.setY(centerPoint.y);
+ rl_root.setX(centerX - resultPointWithdHeight / 2.0f);
+ rl_root.setY(centerY - resultPointWithdHeight / 2.0f);
GradientDrawable gradientDrawable = new GradientDrawable();
gradientDrawable.setCornerRadius(resultPointRadiusCorners);
@@ -305,35 +323,42 @@ public void onClick(View v) {
}
}
int childCount = fl_result_point_root.getChildCount();
- Log.e("======", "fl_result_point_root---childCount:" + childCount);
+ Log.e(">>>>>>", "fl_result_point_root---childCount:" + childCount);
if (childCount <= 0) {
//关闭页面
if (onResultPointClickListener != null) {
onResultPointClickListener.onCancle();
}
}
- Log.e("======", "drawableResultPoint---end");
+ if (MNScanManager.isDebugMode) {
+ iv_show_result.setImageBitmap(barcodeBitmap);
+ }
+ Log.e(">>>>>>", "drawableResultPoint---end");
}
private Point getCenterPoint(int x, int y) {
int centerX = x;
int centerY = y;
+ Rect rectFrame = viewfinderView.getRectFrame();
+ Point previewSizeOnScreen = cameraManager.getConfigManager().getPreviewSizeOnScreen();
//判断是不是全屏模式
if (!scanConfig.isFullScreenScan()) {
- if (cameraFrame != null) {
- centerX += cameraFrame.left;
- centerY += cameraFrame.top;
+ //计算对应点在当前View上的宽高
+ float newHeight = (float) y / (float) previewSizeOnScreen.y * resizeAbleSurfaceView.getHeight();
+ centerY = (int) newHeight;
+ float newWidth = (float) x / (float) previewSizeOnScreen.x * resizeAbleSurfaceView.getWidth();
+ centerX = (int) newWidth;
+
+ if (viewfinderView != null) {
+ centerX += rectFrame.left;
+ centerY += rectFrame.top;
}
} else {
- centerY += statusBarHeight;
- }
- if (resizeAbleSurfaceView != null && scanSurfaceView != null) {
- if (resizeAbleSurfaceView.getHeight() > scanSurfaceView.getHeight()) {
- centerY -= (resizeAbleSurfaceView.getHeight() - scanSurfaceView.getHeight()) / 2;
- }
-// if (resizeAbleSurfaceView.getWidth() > scanSurfaceView.getWidth()) {
-// centerX -= (resizeAbleSurfaceView.getWidth() - scanSurfaceView.getWidth()) / 2;
-// }
+ //计算对应点在当前View上的宽高
+ float newHeight = (float) y / (float) previewSizeOnScreen.y * resizeAbleSurfaceView.getHeight();
+ centerY = (int) newHeight;
+ float newWidth = (float) x / (float) previewSizeOnScreen.x * resizeAbleSurfaceView.getWidth();
+ centerX = (int) newWidth;
}
return new Point(centerX, centerY);
}
diff --git a/libraryzxing/src/main/java/com/google/zxing/client/android/view/ScanSurfaceView.java b/libraryzxing/src/main/java/com/google/zxing/client/android/view/ScanSurfaceView.java
index 1606c68..1129765 100644
--- a/libraryzxing/src/main/java/com/google/zxing/client/android/view/ScanSurfaceView.java
+++ b/libraryzxing/src/main/java/com/google/zxing/client/android/view/ScanSurfaceView.java
@@ -8,6 +8,7 @@
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.google.zxing.BarcodeFormat;
@@ -159,6 +160,7 @@ public MNScanConfig getScanConfig() {
}
public void handleDecode(Result[] rawResult, Bitmap barcode, float scaleFactor) {
+ Log.i(">>>>>>", "scaleFactor---:" + scaleFactor);
if (rawResult.length <= 0) {
return;
}
@@ -175,8 +177,9 @@ public void handleDecode(Result[] rawResult, Bitmap barcode, float scaleFactor)
//展示结果点
resultPointView.setResizeAbleSurfaceView(surfaceView);
resultPointView.setScanSurfaceView(this);
- resultPointView.setCameraFrame(getCameraManager().getFramingRect());
- resultPointView.setDatas(rawResult);
+ resultPointView.setViewfinderView(viewfinderView);
+ resultPointView.setCameraManager(getCameraManager());
+ resultPointView.setDatas(rawResult, barcode, scaleFactor);
resultPointView.setVisibility(View.VISIBLE);
stopScan();
if (onScanCallback != null) {
@@ -315,6 +318,11 @@ public void onDestroy() {
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
+ Log.e(TAG, ">>>>>>surfaceChanged---width:" + width + ",height:" + height);
+ ViewGroup.LayoutParams layoutParams = resultPointView.getLayoutParams();
+ layoutParams.width = width;
+ layoutParams.height = height;
+ resultPointView.setLayoutParams(layoutParams);
}
@Override
diff --git a/libraryzxing/src/main/java/com/google/zxing/client/android/view/ViewfinderView.java b/libraryzxing/src/main/java/com/google/zxing/client/android/view/ViewfinderView.java
index 46b1202..31dad8e 100755
--- a/libraryzxing/src/main/java/com/google/zxing/client/android/view/ViewfinderView.java
+++ b/libraryzxing/src/main/java/com/google/zxing/client/android/view/ViewfinderView.java
@@ -384,7 +384,7 @@ public void startAnimation() {
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
- if(!needAnimation){
+ if (!needAnimation) {
return;
}
linePosition = (int) animation.getAnimatedValue();
@@ -422,4 +422,7 @@ public void destroyView() {
}
}
+ public Rect getRectFrame() {
+ return frame;
+ }
}
diff --git a/libraryzxing/src/main/res/layout/mn_scan_result_point_view.xml b/libraryzxing/src/main/res/layout/mn_scan_result_point_view.xml
index 9ee9588..4c19ba2 100644
--- a/libraryzxing/src/main/res/layout/mn_scan_result_point_view.xml
+++ b/libraryzxing/src/main/res/layout/mn_scan_result_point_view.xml
@@ -33,6 +33,13 @@
+
+