diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index b107cdb..831e02a 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/README.md b/README.md
index 6f1df66..1732b4c 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,10 @@ ZXingLite for Android 是ZXing的精简版,基于ZXing库优化扫码和生成
| labelTextColor | color |#FFC0C0C0| 提示文本字体颜色 |
| labelTextSize | dimension |14sp| 提示文本字体大小 |
| labelTextPadding | dimension |24dp| 提示文本距离扫描区的间距 |
-| labelTextLocation | enum |top| 提示文本信息显示的位置 |
+| showResultPoint | boolean | false | 是否显示合适的扫码结果点 |
+| frameWidth | dimension | | 扫码框宽度,需与frameHeight同时使用才有效 |
+| frameHeight | dimension | | 扫码框高度,需与frameWidth同时使用才有效 |
+
## 引入
@@ -37,17 +40,17 @@ ZXingLite for Android 是ZXing的精简版,基于ZXing库优化扫码和生成
com.king.zxing
zxing-lite
- 1.0.4
+ 1.0.5
pom
```
### Gradle:
```gradle
-implementation 'com.king.zxing:zxing-lite:1.0.4'
+implementation 'com.king.zxing:zxing-lite:1.0.5'
```
### Lvy:
```lvy
-
+
```
diff --git a/lib/src/main/java/com/king/zxing/ViewfinderView.java b/lib/src/main/java/com/king/zxing/ViewfinderView.java
index 9b7335e..8b300bc 100644
--- a/lib/src/main/java/com/king/zxing/ViewfinderView.java
+++ b/lib/src/main/java/com/king/zxing/ViewfinderView.java
@@ -22,7 +22,6 @@ import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
-import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Rect;
@@ -35,6 +34,7 @@ import android.text.StaticLayout;
import android.text.TextPaint;
import android.text.TextUtils;
import android.util.AttributeSet;
+import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.View;
@@ -56,7 +56,7 @@ public final class ViewfinderView extends View {
private static final long ANIMATION_DELAY = 20L;
private static final int CURRENT_POINT_OPACITY = 0xA0;
private static final int MAX_RESULT_POINTS = 20;
- private static final int POINT_SIZE = 6;
+ private static final int POINT_SIZE = 8;
private static final int CORNER_RECT_WIDTH = 8; //扫描区边角的宽
private static final int CORNER_RECT_HEIGHT = 40; //扫描区边角的高
@@ -76,7 +76,7 @@ public final class ViewfinderView extends View {
//四角颜色
private final int cornerColor;
private final int resultPointColor;
- private int scannerAlpha;
+// private int scannerAlpha;
private final float labelTextPadding;
private TextLocation labelTextLocation;
//扫描区域提示文本
@@ -86,7 +86,15 @@ public final class ViewfinderView extends View {
private float labelTextSize;
public int scannerStart = 0;
public int scannerEnd = 0;
- private boolean isShowResultPoint = false;
+ private boolean isShowResultPoint;
+
+ private int screenWidth;
+ private int screenHeight;
+ //扫码框宽
+ private int frameWidth;
+ //扫码框宽
+ private int frameHeight;
+
private List possibleResultPoints;
private List lastPossibleResultPoints;
@@ -132,13 +140,25 @@ public final class ViewfinderView extends View {
labelTextPadding = array.getDimension(R.styleable.ViewfinderView_labelTextPadding,TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,24,getResources().getDisplayMetrics()));
labelTextLocation = TextLocation.getFromInt(array.getInt(R.styleable.ViewfinderView_labelTextLocation,0));
+ isShowResultPoint = array.getBoolean(R.styleable.ViewfinderView_showResultPoint,false);
+
+ frameWidth = array.getDimensionPixelSize(R.styleable.ViewfinderView_frameWidth,0);
+ frameHeight = array.getDimensionPixelSize(R.styleable.ViewfinderView_frameHeight,0);
+
array.recycle();
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
- scannerAlpha = 0;
+// scannerAlpha = 0;
possibleResultPoints = new ArrayList<>(5);
lastPossibleResultPoints = null;
+
+ screenWidth = getDisplayMetrics().widthPixels;
+ screenHeight = getDisplayMetrics().heightPixels;
+ }
+
+ private DisplayMetrics getDisplayMetrics(){
+ return getResources().getDisplayMetrics();
}
public void setCameraManager(CameraManager cameraManager) {
@@ -164,12 +184,22 @@ public final class ViewfinderView extends View {
@SuppressLint("DrawAllocation")
@Override
public void onDraw(Canvas canvas) {
- if (cameraManager == null) {
- return; // not ready yet, early draw before done configuring
+
+ Rect frame;
+ if(frameWidth > 0 && frameWidth < screenWidth && frameHeight > 0 && frameHeight < screenHeight){
+ //扫码框默认居中,当自定义扫码框宽高时,支持利用内距偏移
+ int leftOffset = (screenWidth - frameWidth) / 2 + getPaddingLeft() - getPaddingRight();
+ int topOffset = (screenHeight - frameHeight) / 2 + getPaddingTop() - getPaddingBottom();
+ frame = new Rect(leftOffset, topOffset, leftOffset + frameWidth, topOffset + frameHeight);
+ }else{
+ if (cameraManager == null) {
+ return; // not ready yet, early draw before done configuring
+ }
+ frame = cameraManager.getFramingRect();
}
- Rect frame = cameraManager.getFramingRect();
- Rect previewFrame = cameraManager.getFramingRectInPreview();
- if (frame == null || previewFrame == null) {
+
+
+ if (frame == null) {
return;
}
@@ -202,46 +232,8 @@ public final class ViewfinderView extends View {
drawLaserScanner(canvas,frame);
//绘制提示信息
drawTextInfo(canvas, frame);
-
- float scaleX = frame.width() / (float) previewFrame.width();
- float scaleY = frame.height() / (float) previewFrame.height();
-
- List currentPossible = possibleResultPoints;
- List currentLast = lastPossibleResultPoints;
- int frameLeft = frame.left;
- int frameTop = frame.top;
- if (currentPossible.isEmpty()) {
- lastPossibleResultPoints = null;
- } else {
- possibleResultPoints = new ArrayList<>(5);
- lastPossibleResultPoints = currentPossible;
- paint.setAlpha(CURRENT_POINT_OPACITY);
- paint.setColor(resultPointColor);
- synchronized (currentPossible) {
- for (ResultPoint point : currentPossible) {
- if(point.getX()frame.right ||
- point.getY()frame.bottom){
- continue;
- }
- canvas.drawCircle(frameLeft + (int) (point.getX() * scaleX),
- frameTop + (int) (point.getY() * scaleY),
- POINT_SIZE, paint);
- }
- }
- }
- if (currentLast != null) {
- paint.setAlpha(CURRENT_POINT_OPACITY / 2);
- paint.setColor(resultPointColor);
- synchronized (currentLast) {
- float radius = POINT_SIZE / 2.0f;
- for (ResultPoint point : currentLast) {
- canvas.drawCircle(frameLeft + (int) (point.getX() * scaleX),
- frameTop + (int) (point.getY() * scaleY),
- radius, paint);
- }
- }
- }
-
+ //绘制扫码结果点
+ drawResultPoint(canvas,frame);
// Request another update at the animation interval, but only repaint the laser line,
// not the entire viewfinder mask.
postInvalidateDelayed(ANIMATION_DELAY,
@@ -335,6 +327,49 @@ public final class ViewfinderView extends View {
canvas.drawRect(0, frame.bottom + 1, width, height, paint);
}
+ //绘制扫码结果点
+ private void drawResultPoint(Canvas canvas,Rect frame){
+
+ if(!isShowResultPoint){
+ return;
+ }
+
+ List currentPossible = possibleResultPoints;
+ List currentLast = lastPossibleResultPoints;
+
+ if (currentPossible.isEmpty()) {
+ lastPossibleResultPoints = null;
+ } else {
+ possibleResultPoints = new ArrayList<>(5);
+ lastPossibleResultPoints = currentPossible;
+ paint.setAlpha(CURRENT_POINT_OPACITY);
+ paint.setColor(resultPointColor);
+ synchronized (currentPossible) {
+ for (ResultPoint point : currentPossible) {
+ if(point.getX()frame.right ||
+ point.getY()frame.bottom){
+ continue;
+ }
+ canvas.drawCircle( point.getX(),point.getY(), POINT_SIZE, paint);
+ }
+ }
+ }
+ if (currentLast != null) {
+ paint.setAlpha(CURRENT_POINT_OPACITY / 2);
+ paint.setColor(resultPointColor);
+ synchronized (currentLast) {
+ float radius = POINT_SIZE / 2.0f;
+ for (ResultPoint point : currentLast) {
+ if(point.getX()frame.right ||
+ point.getY()frame.bottom){
+ continue;
+ }
+ canvas.drawCircle( point.getX(),point.getY(), radius, paint);
+ }
+ }
+ }
+ }
+
public void drawViewfinder() {
Bitmap resultBitmap = this.resultBitmap;
this.resultBitmap = null;
@@ -348,6 +383,10 @@ public final class ViewfinderView extends View {
return isShowResultPoint;
}
+ /**
+ * 设置显示结果点
+ * @param showResultPoint 是否显示结果点
+ */
public void setShowResultPoint(boolean showResultPoint) {
isShowResultPoint = showResultPoint;
}
diff --git a/lib/src/main/java/com/king/zxing/camera/AutoFocusManager.java b/lib/src/main/java/com/king/zxing/camera/AutoFocusManager.java
index d8d94d6..8817c33 100644
--- a/lib/src/main/java/com/king/zxing/camera/AutoFocusManager.java
+++ b/lib/src/main/java/com/king/zxing/camera/AutoFocusManager.java
@@ -34,7 +34,7 @@ final class AutoFocusManager implements Camera.AutoFocusCallback {
private static final String TAG = AutoFocusManager.class.getSimpleName();
- private static final long AUTO_FOCUS_INTERVAL_MS = 1000L;
+ private static final long AUTO_FOCUS_INTERVAL_MS = 1200L;
private static final Collection FOCUS_MODES_CALLING_AF;
static {
FOCUS_MODES_CALLING_AF = new ArrayList<>(2);
diff --git a/lib/src/main/res/values/attrs.xml b/lib/src/main/res/values/attrs.xml
index 597b969..7659114 100644
--- a/lib/src/main/res/values/attrs.xml
+++ b/lib/src/main/res/values/attrs.xml
@@ -13,6 +13,9 @@
+
+
+
\ No newline at end of file
diff --git a/versions.gradle b/versions.gradle
index dd48bc9..9bf86aa 100644
--- a/versions.gradle
+++ b/versions.gradle
@@ -1,7 +1,7 @@
//App
def app_version = [:]
-app_version.versionCode = 5
-app_version.versionName = "1.0.4"
+app_version.versionCode = 6
+app_version.versionName = "1.0.5"
ext.app_version = app_version
//build version