使用zxing进行QR code扫描,默认是横屏扫描。如何才能做到竖屏呢。
具体可以参考:http://blog.whomeninja.in/android-barcode-scanner-vertical-orientation-and-camera-flash/
方法是使用上面的方法,这里简单总结一下:
1.首先参考的网址的竖屏方法并没有用,而是下载了它的github源码(https://github.com/rajdeol/android-barcode-scanner-bulk-scan-with-flash),发现使用的是另外一个方法。
2.先放上代码:
package in.whomeninja.android_barcode_scanner_bulk_scan_with_flash; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.view.KeyEvent; import android.view.View; import com.journeyapps.barcodescanner.CaptureManager; import com.journeyapps.barcodescanner.DecoratedBarcodeView; /** * Created by RajinderPal on 1/29/2017. */ public class TorchOnCaptureActivity extends Activity { private CaptureManager capture; private DecoratedBarcodeView barcodeScannerView; private View turnflashOn, turnflashOff; private boolean cameraFlashOn = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); barcodeScannerView = initializeContent(); TorchEventListener torchEventListener = new TorchEventListener(this); barcodeScannerView.setTorchListener(torchEventListener); turnflashOn = findViewById(R.id.switch_flashlight_on); turnflashOff = findViewById(R.id.switch_flashlight_off); // turn the flash on if set via intent Intent scanIntent = getIntent(); if(scanIntent.hasExtra(appConstants.CAMERA_FLASH_ON)){ if(scanIntent.getBooleanExtra(appConstants.CAMERA_FLASH_ON,false)){ barcodeScannerView.setTorchOn(); updateView(); } } capture = new CaptureManager(this, barcodeScannerView); capture.initializeFromIntent(getIntent(), savedInstanceState); capture.decode(); } /** * Override to use a different layout. * * @return the DecoratedBarcodeView */ protected DecoratedBarcodeView initializeContent() { setContentView(R.layout.capture_flash); //setContentView(com.google.zxing.client.android.R.layout.zxing_capture); return (DecoratedBarcodeView)findViewById(com.google.zxing.client.android.R.id.zxing_barcode_scanner); } @Override protected void onResume() { super.onResume(); capture.onResume(); } @Override protected void onPause() { super.onPause(); capture.onPause(); } @Override protected void onDestroy() { super.onDestroy(); capture.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); capture.onSaveInstanceState(outState); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { capture.onRequestPermissionsResult(requestCode, permissions, grantResults); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return barcodeScannerView.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event); } public void toggleFlash(View view){ if(cameraFlashOn){ barcodeScannerView.setTorchOff(); }else{ barcodeScannerView.setTorchOn(); } } public void updateView(){ if(cameraFlashOn){ turnflashOn.setVisibility(View.GONE); turnflashOff.setVisibility(View.VISIBLE); }else{ turnflashOn.setVisibility(View.VISIBLE); turnflashOff.setVisibility(View.GONE); } } class TorchEventListener implements DecoratedBarcodeView.TorchListener{ private TorchOnCaptureActivity activity; TorchEventListener(TorchOnCaptureActivity activity){ this.activity = activity; } @Override public void onTorchOn() { this.activity.cameraFlashOn = true; this.activity.updateView(); } @Override public void onTorchOff() { this.activity.cameraFlashOn = false; this.activity.updateView(); } } }
<?xml version="1.0" encoding="UTF-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/switch_flashlight_on" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/turn_on_flashlight" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:visibility="visible" android:onClick="toggleFlash"/> <Button android:id="@+id/switch_flashlight_off" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/turn_off_flashlight" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:visibility="gone" android:onClick="toggleFlash"/> <com.journeyapps.barcodescanner.DecoratedBarcodeView android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentBottom="true" android:layout_alignParentTop="true" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="50dp" android:layout_marginRight="50dp" android:layout_marginTop="150dp" android:layout_marginBottom="150dp" android:id="@+id/zxing_barcode_scanner" app:zxing_use_texture_view="false" app:zxing_preview_scaling_strategy="fitXY"/> </RelativeLayout>
3.竖屏分析:直接调用zxing的代码,默认只有全屏横屏的样式。经过多次试验,发现核心就是直接引用它的布局:
protected DecoratedBarcodeView initializeContent() { setContentView(R.layout.capture_flash); //setContentView(com.google.zxing.client.android.R.layout.zxing_capture); return (DecoratedBarcodeView)findViewById(com.google.zxing.client.android. R.id.zxing_barcode_scanner); }
这里findViewById用的实际是zxing自己的布局,同时xml布局文件里面,<com.journeyapps.barcodescanner.DecoratedBarcodeView>这个控件的id也要和zxing包的一样,即
android:id="@+id/zxing_barcode_scanner"
如此这般,就不会直接调用默认的横屏布局了,但是仅仅这样并不够,因为build app后发现不没有打开摄像头。这就需要下面这些关键语句:
private CaptureManager capture; private DecoratedBarcodeView barcodeScannerView; barcodeScannerView = initializeContent(); capture = new CaptureManager(this, barcodeScannerView); capture.initializeFromIntent(getIntent(), savedInstanceState); capture.decode(); @Override protected void onResume() { super.onResume(); capture.onResume(); } @Override protected void onPause() { super.onPause(); capture.onPause(); } @Override protected void onDestroy() { super.onDestroy(); capture.onDestroy(); }
这些都是初始化
CaptureManager、DecoratedBarcodeView
的语句,加上后就可以调用摄像头,正常使用了,而且是竖屏样式。
只需要以上操作,即使不添加
android:screenOrientation="fullSensor"
也完全不影响。具体原理并不清楚,大概是使用原生布局,可以转换为竖屏吧。
相关推荐
【安卓ZXing扫描二维码竖屏精简版Demo详解】 在移动开发领域,二维码已经成为一种常见的数据交换和识别方式。ZXing(Zebra Crossing)是一个开源的、跨平台的二维码和条形码处理库,适用于Java、Android以及其他...
ZXing(Zebra Crossing)是Google开发的一个开源...通过合理地集成和配置,开发者可以快速地在自己的应用中加入这一实用功能,而横竖屏的支持则让用户体验更加友好。结合ZXingDemo,学习和实践会变得更加直观和高效。
本教程将深入探讨如何将ZXing 3.2版本从默认的横屏模式改为竖屏模式,并保持良好的用户体验,同时保证识别速度。 首先,我们需要理解ZXing的扫描界面为何默认为横屏。这是因为横屏模式通常可以提供更广阔的视野,...
在默认情况下,ZXing库设计的扫描界面可能更适合横屏使用,扫描框较小,这可能导致在竖屏模式下用户需要将手机非常靠近二维码才能正确扫描,这并不符合用户的使用习惯。为了改善这种情况,我们需要对ZXing的扫描界面...
3. **横屏转竖屏扫描**: 微信的扫码功能默认可能是横屏展示,但大多数手机用户习惯于竖屏操作。因此,将ZXing的扫描界面调整为竖屏模式,是提高用户体验的关键。 4. **Java到Delphi接口**: Delphi XE10不直接支持...
文中提及的“xe 10 zxing扫描二维码和识别图片二维码及其优化策略.pdf”,涉及到DelphiXE在实现二维码扫描和识别图片二维码的功能,并探讨了如何优化这一过程。 首先,二维码(QR Code)是由日本的Denso Wave公司于...
二维码扫描技术是现代移动设备上常见的一种...总之,二维码扫描技术结合横屏竖屏的支持,极大地便利了用户获取和传递信息。在实际应用开发中,理解其工作原理并正确地集成与优化这一功能,对于提升用户体验至关重要。
本篇将详细解析标题和描述中提到的"android二维码扫描竖屏,横屏"的相关知识点,包括竖屏简化版和横屏Google源码的应用。 1. **二维码扫描原理** 二维码扫描主要依赖于二维码解码库,例如ZXing(Zebra Crossing)库...
在本案例中,我们将深入探讨如何在Android应用中使用ZXing实现竖屏模式下的条码扫描,并处理摄像头90度旋转的问题。 首先,我们需要了解`CameraManager`类。这个类是ZXing库中负责管理相机的核心组件。在实现竖屏...
总的来说,实现Android二维码横屏竖屏的支持,需要考虑界面布局、屏幕方向监听、相机预览的适配以及交互设计等多个方面。通过合理的资源管理和代码编写,我们可以为用户提供一个无论在横屏还是竖屏下都能顺畅使用的...
本Demo主要展示了如何利用zxing库实现一个支持横竖屏切换的二维码扫描功能。ZXing,全称Zebra Crossing,是一个开源的条码处理库,支持多种格式的条码和二维码扫描。 首先,我们需要在项目中集成zxing库。这里使用...
本项目着重介绍如何利用Zxing实现一个横竖屏都支持且可以切换激光线的二维码扫描功能。 首先,我们来看Zxing的基本概念。Zxing,全称“Zebra Crossing”,由Google开发,主要用于读取、生成和解码各种条形码和...
综上所述,"zxing 竖屏完美解决"是关于如何在Android应用中使用ZXing库,特别是在竖屏模式下,确保二维码图像的显示和扫描功能的稳定性和用户体验。这个解决方案涵盖了Android开发的多个方面,包括屏幕适配、库集成...
首先,让我们来看如何将Zxing的扫描界面从默认的横屏模式转换为更符合用户习惯的竖屏模式: 1. 在`AndroidManifest.xml`文件中,找到`<activity>`标签,特别是`CaptureActivity`部分,将`screenOrientation`属性...
总的来说,修改Zxing以适应竖屏扫描,不仅涉及到界面布局的调整,还需要考虑图像处理和相机参数的适配,确保在新界面方向下依然能提供良好的用户体验和扫描效果。这个过程需要对Android开发和Zxing库有深入的理解,...
在ZXing1.6版本中,如果默认设置下,二维码扫描界面通常是横屏模式,这对于某些应用场景来说可能不够理想,例如用户可能更倾向于使用手机的竖屏模式进行扫描。因此,将ZXing1.6的横屏识别改为竖屏识别是一个常见的...
在移动应用开发中,支持横屏和竖屏模式的二维码扫描功能是用户体验的重要组成部分。 首先,我们来讨论二维码的基本原理。二维码,全称二维条形码,是一种用黑白相间的图形表示信息的编码方式。它比传统的条形码能...
本文介绍了如何通过修改ZXing源代码,将默认的横屏扫描界面改为竖屏扫描,具体以Delphi环境和Android平台为例,逐步说明了实现过程。 首先,在Delphi环境中调用ZXing源代码实现扫码功能时,可能会发现显示的界面...
第三方ZXing库zxing-android-embedded使用及自定义 1.可通过Intent使用(只需少量代码) 2.可以轻松集成到Activity中,使用方便,只需几行代码轻松...3.可以在横屏或竖屏模式下执行扫描 4.摄像头在后台线程中进行管理
在Android平台上,ZXing通常被用来实现应用内的横/竖屏扫描功能,以方便用户快速获取和分享信息。 在"ZXing二位码横/竖屏扫描"的场景下,我们主要关注的是如何在Android设备上构建一个能够适应不同屏幕方向的二维码...