Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 定制摄像头视图&;在Zxing中旋转二维码?_Android_Qr Code_Zxing - Fatal编程技术网

Android 定制摄像头视图&;在Zxing中旋转二维码?

Android 定制摄像头视图&;在Zxing中旋转二维码?,android,qr-code,zxing,Android,Qr Code,Zxing,我正在与这样一个伟大的图书馆zxing阅读二维码。我已经成功获得二维码了 现在,我的应用程序在景观模式下运行,相机占据整个屏幕,红色QR检测矩形框在中间。我想将此更改为纵向模式&仅用红色QR检测矩形框替换相机视图 我更改了位于zxing库清单文件中的CaptureActivity标记 android:screenOrientation=“纵向” 但是没有找到我真正想要的。我不知道我必须在哪里更改/编写代码才能获得此信息。出于同样的原因,我在这个库中有过非常糟糕的经历。看起来,即使您成功地在纵向模

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

现在,我的应用程序在景观模式下运行,相机占据整个屏幕,红色QR检测矩形框在中间。我想将此更改为纵向模式&仅用红色QR检测矩形框替换相机视图

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

android:screenOrientation=“纵向”


但是没有找到我真正想要的。我不知道我必须在哪里更改/编写代码才能获得此信息。

出于同样的原因,我在这个库中有过非常糟糕的经历。看起来,即使您成功地在纵向模式下显示相机,它也会被拉伸(或者输出图像会被拉伸,或者条形码不会被感知,或者某些设备工作正常,而其他设备则没有)

我怀疑Android只是“喜欢”相机预览处于横向模式,因为这是用户拍照时的自然方向

最后,我所做的是使用横向模式和旋转所有其他模式,因此用户认为这是纵向模式,但事实并非如此。我认为很多应用程序都使用这种技术


我建议,如果您设法解决了这个问题,请在尽可能多的设备上进行测试。

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

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

首先,您需要设计一个肖像模式用户界面。(请不要复制红线图案。)

实际的应用程序代码并不关心二维码的方向。你根本不需要在那里做任何事情。但是,您确实需要进行更改以使屏幕显示正确

您需要查询
Camera.getOrientation()
以检测摄像头的安装方式。通常情况下,“up”在您的右边,我认为几乎每个设备都是以这种方式工作的,以实现兼容性。但从技术上讲,您需要知道如何旋转预览图像

然后使用
Camera.setDisplayOrientation()
告诉它要旋转多少图像才能使其在纵向模式屏幕上正确旋转。这通常是“90”


最后,您需要使用Camera.Parameters.setPreviewSize()选择预览大小,但可能需要翻转您选择的值(480x800 vs 800x480),因为您处于纵向模式。

我也遇到了同样的问题,因此被卡住了大约2天。 实际上,你必须完成一些任务来实现你的目标

  • 下载Zxing库读取二维码。。(希望你已经有了)
  • 创建一个项目并添加Zxing库
  • 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>
    
     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();
            }
        }
    
  • 在清单文件中,添加以下权限:

     <uses-permission android:name="android.permission.CAMERA"/>
    
    就这些。跑步和享受:-)


    谢谢。

    图书馆本身根本不关心方向。该应用程序仅适用于横向,因此您不能将其用于纵向,但无论如何,您都应该编写一个新的应用程序。安卓摄像头“通常”是安装的,所以景观是自然的方向,但你必须查询API才能真正确定!是的,您实际上不必旋转图像,但必须正确匹配预览分辨率和旋转。您是否有任何示例来演示如何对简单相机应用程序(预览和捕获)和此库进行旋转?问题是没有足够的示例/教程。只有这个应用程序很简单,不过需要对多个文件进行一些更改。在这里,我为这个问题提供了一个完整的解决方案:@Roylee:谢谢,您的代码也运行得很好..在扩展它之前,您必须将类CaptureActivity更改为非final。有人在Delphi XE5中使用过它吗?
    @SuppressLint("NewApi") public void startPreview() {
        Camera theCamera = camera;
        if (theCamera != null && !previewing) {
            theCamera.setDisplayOrientation(90);
          theCamera.startPreview();
          previewing = true;
        }
      }