Android 定制摄像头视图&;在Zxing中旋转二维码?
我正在与这样一个伟大的图书馆zxing阅读二维码。我已经成功获得二维码了Android 定制摄像头视图&;在Zxing中旋转二维码?,android,qr-code,zxing,Android,Qr Code,Zxing,我正在与这样一个伟大的图书馆zxing阅读二维码。我已经成功获得二维码了 现在,我的应用程序在景观模式下运行,相机占据整个屏幕,红色QR检测矩形框在中间。我想将此更改为纵向模式&仅用红色QR检测矩形框替换相机视图 我更改了位于zxing库清单文件中的CaptureActivity标记 android:screenOrientation=“纵向” 但是没有找到我真正想要的。我不知道我必须在哪里更改/编写代码才能获得此信息。出于同样的原因,我在这个库中有过非常糟糕的经历。看起来,即使您成功地在纵向模
现在,我的应用程序在景观模式下运行,相机占据整个屏幕,红色QR检测矩形框在中间。我想将此更改为纵向模式&仅用红色QR检测矩形框替换相机视图
我更改了位于zxing库清单文件中的CaptureActivity标记android:screenOrientation=“纵向”
但是没有找到我真正想要的。我不知道我必须在哪里更改/编写代码才能获得此信息。出于同样的原因,我在这个库中有过非常糟糕的经历。看起来,即使您成功地在纵向模式下显示相机,它也会被拉伸(或者输出图像会被拉伸,或者条形码不会被感知,或者某些设备工作正常,而其他设备则没有) 我怀疑Android只是“喜欢”相机预览处于横向模式,因为这是用户拍照时的自然方向 最后,我所做的是使用横向模式和旋转所有其他模式,因此用户认为这是纵向模式,但事实并非如此。我认为很多应用程序都使用这种技术
我建议,如果您设法解决了这个问题,请在尽可能多的设备上进行测试。首先,请不要完全复制我们的应用程序。在这种情况下,你无论如何都需要编写自己的应用程序;这绝对不像更改布局方向那么简单。不仅UI不是为肖像而编写的,应用程序代码也是如此 如果您只想使用固定肖像模式,那么这并不难。完全支持所有4个旋转,带有前/后摄像头,很难做到正确。但不仅仅是1例 首先,您需要设计一个肖像模式用户界面。(请不要复制红线图案。) 实际的应用程序代码并不关心二维码的方向。你根本不需要在那里做任何事情。但是,您确实需要进行更改以使屏幕显示正确 您需要查询
Camera.getOrientation()
以检测摄像头的安装方式。通常情况下,“up”在您的右边,我认为几乎每个设备都是以这种方式工作的,以实现兼容性。但从技术上讲,您需要知道如何旋转预览图像
然后使用Camera.setDisplayOrientation()
告诉它要旋转多少图像才能使其在纵向模式屏幕上正确旋转。这通常是“90”
最后,您需要使用Camera.Parameters.setPreviewSize()选择预览大小,但可能需要翻转您选择的值(480x800 vs 800x480),因为您处于纵向模式。我也遇到了同样的问题,因此被卡住了大约2天。 实际上,你必须完成一些任务来实现你的目标
<?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;
}
}