Pārlūkot izejas kodu

代码重构,点击事件与摄像画面相分离

詹子聪 5 gadi atpakaļ
vecāks
revīzija
96b057711e

+ 1 - 4
app/src/main/AndroidManifest.xml

@@ -27,10 +27,7 @@
             </intent-filter>
         </activity>
 
-        <activity android:name=".ui.CameraActivity"
-            android:screenOrientation="portrait"/>
-
-        <activity android:name=".view.cropper.CropImageActivity"
+        <activity android:name=".ui.MenuActivity"
             android:screenOrientation="portrait"/>
     </application>
 

+ 2 - 2
app/src/main/java/com/miekir/ocr/PermissionActivity.java

@@ -10,7 +10,7 @@ import androidx.annotation.Nullable;
 import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.app.AppCompatActivity;
 
-import com.miekir.ocr.ui.CameraActivity;
+import com.miekir.ocr.ui.MenuActivity;
 import com.tbruyelle.rxpermissions2.RxPermissions;
 
 
@@ -35,7 +35,7 @@ public class PermissionActivity extends AppCompatActivity {
                         // 打开相机
                         //startActivity(new Intent(PermissionActivity.this, CropImageActivity.class));
 
-                        startActivity(new Intent(PermissionActivity.this, CameraActivity.class));
+                        startActivity(new Intent(PermissionActivity.this, MenuActivity.class));
                         finish();
                         //photoSelect();
                     } else {

+ 12 - 114
app/src/main/java/com/miekir/ocr/ui/CameraActivity.java

@@ -1,9 +1,9 @@
 package com.miekir.ocr.ui;
 
+import android.Manifest;
 import android.annotation.SuppressLint;
 import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.graphics.ImageFormat;
 import android.graphics.Point;
@@ -19,7 +19,7 @@ import android.hardware.camera2.TotalCaptureResult;
 import android.hardware.camera2.params.StreamConfigurationMap;
 import android.media.Image;
 import android.media.ImageReader;
-import android.net.Uri;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
@@ -30,22 +30,14 @@ import android.util.Size;
 import android.util.SparseIntArray;
 import android.view.Surface;
 import android.view.TextureView;
-import android.view.View;
 import android.widget.Toast;
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 
-import com.miekir.common.utils.ViewTool;
 import com.miekir.ocr.R;
 import com.miekir.ocr.base.BaseCameraActivity;
 import com.miekir.ocr.tool.CameraPreviewTool;
 import com.miekir.ocr.view.AutoFitTextureView;
-import com.miekir.ocr.view.CropView;
-import com.miekir.ocr.view.GlideV4ImageEngine;
-import com.miekir.ocr.view.IndicatorText;
-import com.zhihu.matisse.Matisse;
-import com.zhihu.matisse.MimeType;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -62,8 +54,7 @@ import java.util.concurrent.TimeUnit;
 
 import static android.os.Environment.DIRECTORY_PICTURES;
 
-public class CameraActivity extends BaseCameraActivity implements View.OnClickListener, CropView.onLocationListener {
-    private static final int REQUEST_CODE_CHOOSE = 6;
+public class CameraActivity extends BaseCameraActivity {
     private CameraManager mCameraManager;
 
     private static SparseIntArray ORIENTATIONS = new SparseIntArray();
@@ -95,13 +86,7 @@ public class CameraActivity extends BaseCameraActivity implements View.OnClickLi
     private static final int MAX_PREVIEW_HEIGHT = 1080;
     private int mSensorOrientation;
 
-    /**识别不同的内容*/
-    private IndicatorText it_email;
-    private IndicatorText it_address;
-    private IndicatorText it_name;
-    private IndicatorText it_all;
-    private CropView pcv_scan;
-    private int mLastType = CropView.SCAN_TYPE_EMAIL;
+
 
     private TextureView.SurfaceTextureListener textureListener = new TextureView.SurfaceTextureListener() {
         @Override
@@ -163,18 +148,6 @@ public class CameraActivity extends BaseCameraActivity implements View.OnClickLi
     public void initViews(Bundle savedInstanceState) {
         textureView = findViewById(R.id.textureView);
         textureView.setSurfaceTextureListener(textureListener);
-
-        it_email = findViewById(R.id.it_email);
-        it_address = findViewById(R.id.it_address);
-        it_name = findViewById(R.id.it_name);
-        it_all = findViewById(R.id.it_all);
-
-        ViewTool.setOnClickListener(this, new int[]{R.id.fl_take, R.id.fl_album,
-                it_email.getId(), it_address.getId(), it_name.getId(), it_all.getId()}, this);
-
-        // 裁剪View
-        pcv_scan = findViewById(R.id.pcv_scan);
-        pcv_scan.setLocationListener(this);
     }
 
 
@@ -256,10 +229,12 @@ public class CameraActivity extends BaseCameraActivity implements View.OnClickLi
                 textureView.setTransform(CameraPreviewTool.configureTransform(width, height, imageDimension, CameraActivity.this));
             }
 
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
+                    checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
+                return;
+            }
             mCameraManager.openCamera(cameraId, stateCallback, null);
-        } catch (CameraAccessException e) {
-            e.printStackTrace();
-        } catch (InterruptedException e) {
+        } catch (CameraAccessException | InterruptedException e) {
             e.printStackTrace();
         }
         Log.e("tag", "openCamera X");
@@ -491,86 +466,9 @@ public class CameraActivity extends BaseCameraActivity implements View.OnClickLi
         }
     };
 
-    @Override
-    public void onClick(View v) {
-        switch (v.getId()) {
-            case R.id.fl_take:
-                takePicture();
-                break;
-            case R.id.fl_album:
-                Matisse.from(this)
-                        .choose(MimeType.ofImage())
-                        .countable(true)
-                        .maxSelectable(1)
-                        //.addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))
-                        //.gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size))
-                        .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
-                        .thumbnailScale(0.85f)
-                        //.imageEngine(new GlideEngine())
-                        .imageEngine(new GlideV4ImageEngine())
-                        //.showPreview(false) // Default is `true`
-                        .forResult(REQUEST_CODE_CHOOSE);
-                break;
-
-            case R.id.it_email:
-                it_email.onIndicatorClicked();
-                it_address.onIndicatorRelease();
-                it_name.onIndicatorRelease();
-                it_all.onIndicatorRelease();
-                if (mLastType != CropView.SCAN_TYPE_EMAIL) {
-                    mLastType = CropView.SCAN_TYPE_EMAIL;
-                    pcv_scan.setScanArea(mLastType);
-                }
-                break;
-            case R.id.it_address:
-                it_email.onIndicatorRelease();
-                it_address.onIndicatorClicked();
-                it_name.onIndicatorRelease();
-                it_all.onIndicatorRelease();
-                if (mLastType != CropView.SCAN_TYPE_ADDRESS_NAME) {
-                    mLastType = CropView.SCAN_TYPE_ADDRESS_NAME;
-                    pcv_scan.setScanArea(mLastType);
-                }
-                break;
-            case R.id.it_name:
-                it_email.onIndicatorRelease();
-                it_address.onIndicatorRelease();
-                it_name.onIndicatorClicked();
-                it_all.onIndicatorRelease();
-                it_all.onIndicatorRelease();
-                if (mLastType != CropView.SCAN_TYPE_ADDRESS_NAME) {
-                    mLastType = CropView.SCAN_TYPE_ADDRESS_NAME;
-                    pcv_scan.setScanArea(mLastType);
-                }
-                break;
-            case R.id.it_all:
-
-                it_email.onIndicatorRelease();
-                it_address.onIndicatorRelease();
-                it_name.onIndicatorRelease();
-                it_all.onIndicatorClicked();
-                if (mLastType != CropView.SCAN_TYPE_ALL) {
-                    mLastType = CropView.SCAN_TYPE_ALL;
-                    pcv_scan.setScanArea(mLastType);
-                }
-                break;
-            default:
-                break;
-        }
-    }
 
-    private List<Uri> mSelected;
 
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-        if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_CHOOSE) {
-            mSelected = Matisse.obtainResult(data);
-        }
-    }
 
-    @Override
-    public void locationRect(int startX, int startY, int endX, int endY) {
-        // 截取的区域坐标信息
-    }
+
+
 }

+ 106 - 0
app/src/main/java/com/miekir/ocr/ui/MenuActivity.java

@@ -0,0 +1,106 @@
+package com.miekir.ocr.ui;
+
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.annotation.Nullable;
+
+import com.miekir.common.utils.ViewTool;
+import com.miekir.ocr.R;
+import com.miekir.ocr.view.CropView;
+import com.miekir.ocr.view.GlideV4ImageEngine;
+import com.miekir.ocr.view.IndicatorText;
+import com.zhihu.matisse.Matisse;
+import com.zhihu.matisse.MimeType;
+
+import java.util.List;
+
+/**
+ * Copyright (C), 2019-2020, Genlot
+ *
+ * @author 詹子聪
+ * @date 2020/7/27 9:01
+ * Description: 菜单操作
+ */
+public class MenuActivity extends CameraActivity implements CropView.onLocationListener, View.OnClickListener {
+    private static final int REQUEST_CODE_CHOOSE = 6;
+
+    private CropView pcv_scan;
+    private int mCurrentType = CropView.SCAN_TYPE_EMAIL;
+    private int[] MENU_ID_LIST = {R.id.it_email, R.id.it_address, R.id.it_name, R.id.it_all};
+
+    @Override
+    public void initViews(Bundle savedInstanceState) {
+        super.initViews(savedInstanceState);
+
+        int[] clickIds = new int[]{R.id.it_email, R.id.it_address, R.id.it_name, R.id.it_all,
+                R.id.fl_take, R.id.fl_album};
+        ViewTool.setOnClickListener(this, clickIds, this);
+
+        // 裁剪View
+        pcv_scan = findViewById(R.id.pcv_scan);
+        pcv_scan.setLocationListener(this);
+    }
+
+    @Override
+    public void onClick(View v) {
+        switch (v.getId()) {
+            case R.id.fl_take:
+                takePicture();
+                break;
+            case R.id.fl_album:
+                Matisse.from(this)
+                        .choose(MimeType.ofImage())
+                        .countable(true)
+                        .maxSelectable(1)
+                        //.addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))
+                        //.gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size))
+                        .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
+                        .thumbnailScale(0.85f)
+                        //.imageEngine(new GlideEngine())
+                        .imageEngine(new GlideV4ImageEngine())
+                        //.showPreview(false) // Default is `true`
+                        .forResult(REQUEST_CODE_CHOOSE);
+                break;
+
+            case R.id.it_email:
+            case R.id.it_address:
+            case R.id.it_name:
+            case R.id.it_all:
+                setScanArea(v.getId());
+                break;
+            default:
+                break;
+        }
+    }
+
+    private void setScanArea(int viewId) {
+        for (int index = 0, len = MENU_ID_LIST.length; index < len; index++) {
+            IndicatorText indicatorText = findViewById(MENU_ID_LIST[index]);
+            if (MENU_ID_LIST[index] == viewId) {
+                indicatorText.onIndicatorClicked();
+                mCurrentType = CropView.SCAN_TYPES[index];
+            } else {
+                indicatorText.onIndicatorRelease();
+            }
+        }
+        pcv_scan.setScanArea(mCurrentType);
+    }
+
+    private List<Uri> mSelected;
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_CHOOSE) {
+            mSelected = Matisse.obtainResult(data);
+        }
+    }
+
+    @Override
+    public void locationRect(int startX, int startY, int endX, int endY) {
+        // 截取的区域坐标信息
+    }
+}

+ 7 - 9
app/src/main/java/com/miekir/ocr/view/CropView.java

@@ -20,8 +20,10 @@ import com.miekir.ocr.R;
 
 public class CropView extends View {
     public static final int SCAN_TYPE_EMAIL = 0;
-    public static final int SCAN_TYPE_ADDRESS_NAME = 1;
+    public static final int SCAN_TYPE_ADDRESS = 1;
+    public static final int SCAN_TYPE_NAME = 1;
     public static final int SCAN_TYPE_ALL = 2;
+    public static final int[] SCAN_TYPES = {SCAN_TYPE_EMAIL, SCAN_TYPE_ADDRESS, SCAN_TYPE_NAME, SCAN_TYPE_ALL};
     private static final String TAG = "PhotoCropView";
 
     private onLocationListener locationListener;/*listen to the Rect */
@@ -77,7 +79,7 @@ public class CropView extends View {
         super(context, attrs, defStyleAttr);
 
         // 获取到宽高之后再初始化
-        post(() -> setScanArea(SCAN_TYPE_EMAIL));
+        post(() -> setScanArea(SCAN_TYPE_ALL));
     }
 
     /**
@@ -92,7 +94,8 @@ public class CropView extends View {
                 sX = (getWidth()-coverWidth)/2;
                 sY = (int) (getWidth()*0.177);
                 break;
-            case SCAN_TYPE_ADDRESS_NAME:
+            //case SCAN_TYPE_ADDRESS:
+            case SCAN_TYPE_NAME:
                 coverWidth = (int) (getWidth()*0.815);
                 coverHeight = (int) (getWidth()*0.625);
                 sX = (getWidth()-coverWidth)/2;
@@ -106,12 +109,7 @@ public class CropView extends View {
                 sY = 0;
                 break;
             default:
-                coverWidth = (int) (getWidth()*0.815);
-                coverHeight = (int) (getWidth()*0.3);
-                // 起始位置
-                sX = (getWidth()-coverWidth)/2;
-                sY = (int) (getWidth()*0.177);
-                break;
+                return;
         }
 
         init();

+ 3 - 3
app/src/main/res/layout/activity_camera.xml

@@ -80,8 +80,7 @@
                         android:id="@+id/it_email"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        app:text="邮政编码"
-                        app:focused="true"/>
+                        app:text="邮政编码" />
 
                     <Space
                         android:layout_width="0dp"
@@ -114,7 +113,8 @@
                         android:id="@+id/it_all"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        app:text="整单识别"/>
+                        app:text="整单识别"
+                        app:focused="true"/>
 
                     <Space
                         android:layout_width="0dp"