`

使用zxing扫描二维码,横屏转竖屏

阅读更多

使用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扫描二维码竖屏精简版Demo详解】 在移动开发领域,二维码已经成为一种常见的数据交换和识别方式。ZXing(Zebra Crossing)是一个开源的、跨平台的二维码和条形码处理库,适用于Java、Android以及其他...

    ZXing Android二维码/条码扫描,2020Android Studio版本,横竖屏都支持

    ZXing(Zebra Crossing)是Google开发的一个开源...通过合理地集成和配置,开发者可以快速地在自己的应用中加入这一实用功能,而横竖屏的支持则让用户体验更加友好。结合ZXingDemo,学习和实践会变得更加直观和高效。

    Android zxing3.2完美横屏改竖屏

    本教程将深入探讨如何将ZXing 3.2版本从默认的横屏模式改为竖屏模式,并保持良好的用户体验,同时保证识别速度。 首先,我们需要理解ZXing的扫描界面为何默认为横屏。这是因为横屏模式通常可以提供更广阔的视野,...

    zxing竖屏二维码扫描

    在默认情况下,ZXing库设计的扫描界面可能更适合横屏使用,扫描框较小,这可能导致在竖屏模式下用户需要将手机非常靠近二维码才能正确扫描,这并不符合用户的使用习惯。为了改善这种情况,我们需要对ZXing的扫描界面...

    XE10 Android Zxing 实现竖屏扫二维码.docx

    3. **横屏转竖屏扫描**: 微信的扫码功能默认可能是横屏展示,但大多数手机用户习惯于竖屏操作。因此,将ZXing的扫描界面调整为竖屏模式,是提高用户体验的关键。 4. **Java到Delphi接口**: Delphi XE10不直接支持...

    xe 10 zxing扫描二维码和识别图片二维码及其优化策略.pdf

    文中提及的“xe 10 zxing扫描二维码和识别图片二维码及其优化策略.pdf”,涉及到DelphiXE在实现二维码扫描和识别图片二维码的功能,并探讨了如何优化这一过程。 首先,二维码(QR Code)是由日本的Denso Wave公司于...

    四步将ZXing横屏改竖屏方法.pdf

    本文介绍了如何通过修改ZXing源代码,将默认的横屏扫描界面改为竖屏扫描,具体以Delphi环境和Android平台为例,逐步说明了实现过程。 首先,在Delphi环境中调用ZXing源代码实现扫码功能时,可能会发现显示的界面...

    二维码扫描,横屏竖屏都支持

    二维码扫描技术是现代移动设备上常见的一种...总之,二维码扫描技术结合横屏竖屏的支持,极大地便利了用户获取和传递信息。在实际应用开发中,理解其工作原理并正确地集成与优化这一功能,对于提升用户体验至关重要。

    android二维码扫描竖屏,横屏(竖屏简化代码,横屏google源码)

    本篇将详细解析标题和描述中提到的"android二维码扫描竖屏,横屏"的相关知识点,包括竖屏简化版和横屏Google源码的应用。 1. **二维码扫描原理** 二维码扫描主要依赖于二维码解码库,例如ZXing(Zebra Crossing)库...

    Android Zxing 扫描条码实现竖屏模式

    在本案例中,我们将深入探讨如何在Android应用中使用ZXing实现竖屏模式下的条码扫描,并处理摄像头90度旋转的问题。 首先,我们需要了解`CameraManager`类。这个类是ZXing库中负责管理相机的核心组件。在实现竖屏...

    android二维码横屏竖屏

    总的来说,实现Android二维码横屏竖屏的支持,需要考虑界面布局、屏幕方向监听、相机预览的适配以及交互设计等多个方面。通过合理的资源管理和代码编写,我们可以为用户提供一个无论在横屏还是竖屏下都能顺畅使用的...

    android 二维码扫描 支持横竖屏切换Demo

    本Demo主要展示了如何利用zxing库实现一个支持横竖屏切换的二维码扫描功能。ZXing,全称Zebra Crossing,是一个开源的条码处理库,支持多种格式的条码和二维码扫描。 首先,我们需要在项目中集成zxing库。这里使用...

    二维码扫描Zxing横竖屏都支持,还可以切换激光线

    本项目着重介绍如何利用Zxing实现一个横竖屏都支持且可以切换激光线的二维码扫描功能。 首先,我们来看Zxing的基本概念。Zxing,全称“Zebra Crossing”,由Google开发,主要用于读取、生成和解码各种条形码和...

    zxing 竖屏完美解决

    综上所述,"zxing 竖屏完美解决"是关于如何在Android应用中使用ZXing库,特别是在竖屏模式下,确保二维码图像的显示和扫描功能的稳定性和用户体验。这个解决方案涵盖了Android开发的多个方面,包括屏幕适配、库集成...

    Android Zxing 转换竖屏扫描且提高识别率的方法

    首先,让我们来看如何将Zxing的扫描界面从默认的横屏模式转换为更符合用户习惯的竖屏模式: 1. 在`AndroidManifest.xml`文件中,找到`&lt;activity&gt;`标签,特别是`CaptureActivity`部分,将`screenOrientation`属性...

    Zxing条形码二维码扫描

    总的来说,修改Zxing以适应竖屏扫描,不仅涉及到界面布局的调整,还需要考虑图像处理和相机参数的适配,确保在新界面方向下依然能提供良好的用户体验和扫描效果。这个过程需要对Android开发和Zxing库有深入的理解,...

    ZXing1.6改横屏识别为竖屏识别

    在ZXing1.6版本中,如果默认设置下,二维码扫描界面通常是横屏模式,这对于某些应用场景来说可能不够理想,例如用户可能更倾向于使用手机的竖屏模式进行扫描。因此,将ZXing1.6的横屏识别改为竖屏识别是一个常见的...

    二维码扫描,横屏竖屏都支持.

    在移动应用开发中,支持横屏和竖屏模式的二维码扫描功能是用户体验的重要组成部分。 首先,我们来讨论二维码的基本原理。二维码,全称二维条形码,是一种用黑白相间的图形表示信息的编码方式。它比传统的条形码能...

    第三方ZXing扫描,二维码、条形码扫描,可实现自定义界面扫描,使用超级方便

    第三方ZXing库zxing-android-embedded使用及自定义 1.可通过Intent使用(只需少量代码) 2.可以轻松集成到Activity中,使用方便,只需几行代码轻松...3.可以在横屏或竖屏模式下执行扫描 4.摄像头在后台线程中进行管理

    ZXing二位码横/竖屏扫描

    在Android平台上,ZXing通常被用来实现应用内的横/竖屏扫描功能,以方便用户快速获取和分享信息。 在"ZXing二位码横/竖屏扫描"的场景下,我们主要关注的是如何在Android设备上构建一个能够适应不同屏幕方向的二维码...

Global site tag (gtag.js) - Google Analytics