Zxing的自定义相机视图和旋转QR码?

Shi*_*din 8 android qr-code zxing

我正在与这样一个伟大的图书馆zxing一起阅读二维码.我已经成功获得了二维码.

现在,我的应用程序以横向模式运行,相机占据整个屏幕,红色QR检测矩形框位于中间.我想将其更改为纵向模式并仅使用红色QR检测矩形框替换相机视图.

我更改了zxing库清单文件中的CaptureActivity标记.

android:screenOrientation="portrait".

但没有发现我真正想要的东西.我不知道在哪里更改/编写代码来获取此信息.

Sea*_*wen 5

首先,请不要完全复制我们的应用程序.在这种情况下,您无论如何都需要编写自己的应用程序; 它绝对不像改变布局方向那么简单.用户界面不仅不是为肖像而写,也不是应用代码.

如果您想使用固定人像模式,那么这是不是那么难.完全支持所有4个旋转,使用前/后摄像头,很难做到正确.但不仅仅是1例.

首先,您需要设计纵向模式UI.(请不要复制红线设计.)

实际的应用代码不关心QR码的方向.你根本不需要做任何事情.但您需要进行更改才能使屏幕显示正确.

您需要查询Camera.getOrientation()以检测摄像机的安装方式.通常情况下,"向上"是你的权利,我认为几乎所有设备都以这种方式兼容.但从技术上讲,您需要知道如何知道旋转预览图像的数量.

然后你用Camera.setDisplayOrientation()它来告诉它旋转图像多少,使它在你的肖像模式屏幕上正确旋转.这通常是"90".

最后你需要选择预览尺寸,Camera.Parameters.setPreviewSize()但可能需要翻转你选择的值(480x800 vs 800x480)因为你是肖像.


Md.*_*lam 5

我遇到了同样的问题,并且被困了大约2天.实际上你必须完成一些任务来实现你的目标.

  1. 下载Zxing图书馆阅读二维码..(希望你已经有)
  2. 创建一个项目并添加Zxing库.
  3. 您的main.xml文件应如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
    
    <FrameLayout
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center_horizontal">
        <include layout="@layout/capture"/>
    </FrameLayout>
    
    </LinearLayout>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 您的主要活动应如下所示:

     public class ScannerActivity extends CaptureActivity {
    
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
    
            }
    
            @Override 
            public void handleDecode(Result rawResult, Bitmap barcode) 
            {
       Toast.makeText(this.getApplicationContext(), "Scanned code " + rawResult.getText(), Toast.LENGTH_LONG).show();
            }
        }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 在清单文件中添加以下权限:

     <uses-permission android:name="android.permission.CAMERA"/>
    
    Run Code Online (Sandbox Code Playgroud)
  6. 最后非常重要的任务你需要做的相机旋转问题,将以下方法替换为

CameraManager.java(在com.google.zxing.client.android.camera包中)

@SuppressLint("NewApi") public void startPreview() {
    Camera theCamera = camera;
    if (theCamera != null && !previewing) {
        theCamera.setDisplayOrientation(90);
      theCamera.startPreview();
      previewing = true;
    }
  }
Run Code Online (Sandbox Code Playgroud)

就这样 .跑步和享受:-)

谢谢..