【问题标题】:How can I create custom view using Zxing?如何使用 Zxing 创建自定义视图?
【发布时间】:2019-04-02 14:44:24
【问题描述】:

我正在尝试使用 Zxing 创建用于扫描二维码的自定义视图

实际上我可以在我的 gradle 的依赖项上实现这个库,并且一切都与默认布局视图完美配合 ('com.journeyapps:zxing-android-embedded:3.6.0')

现在我想创建自己的视图,但这些类是只读文件

如何导入zxing并编辑核心代码?

我还检查了这个项目,我意识到在这个项目中我可以编辑完整的代码:https://github.com/journeyapps/zxing-android-embedded

【问题讨论】:

    标签: java android zxing


    【解决方案1】:

    使用这个类:

    package com.company.project.view.activities
    
    import android.content.Intent
    import android.os.Bundle
    import android.support.v7.app.AppCompatActivity
    import com.google.zxing.Result
    import kotlinx.android.synthetic.main.activity_scaling_scanner.*
    import me.dm7.barcodescanner.zxing.ZXingScannerView
    import com.company.project.R
    
    class ScanActivity : AppCompatActivity(), ZXingScannerView.ResultHandler {
    
        private val FLASH_STATE = "FLASH_STATE"
        private val AUTOFOCUS_STATE = "AUTOFOCUS_STATE"
    
        private var mScannerView: ZXingScannerView? = null
        private var mFlash: Boolean = false
        private var mAutofocus: Boolean = true
        private var resultText: String = ""
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_scanner)
    
            mScannerView = ZXingScannerView(this)
    
            content_frame.addView(mScannerView)
    
            mScannerView?.setFlash(mFlash)
            mScannerView?.setAutoFocus(true)
    
            switchFlash.setOnClickListener({
                mFlash = !mFlash
                mScannerView?.setFlash(mFlash)
            })
    
        }
    
        override fun onResume() {
            super.onResume()
            mScannerView?.setResultHandler(this)
            mScannerView?.setAspectTolerance(0.2f)
            mScannerView?.setFlash(mFlash)
            mScannerView?.setAutoFocus(mAutofocus)
            mScannerView?.startCamera()
    
            switchFlash.setChecked(mFlash)
        }
    
        override fun onPause() {
            super.onPause()
            mScannerView?.stopCamera()
        }
    
        override fun onSaveInstanceState(outState: Bundle?) {
            super.onSaveInstanceState(outState)
            outState?.putBoolean(FLASH_STATE, mFlash)
            outState?.putBoolean(AUTOFOCUS_STATE, mAutofocus)
        }
    
        override fun handleResult(result: Result?) {
            mScannerView?.resumeCameraPreview(this)
    
            if (result == null) {
                return
            }
    
            mScannerView?.stopCamera()
    
            resultText = result.text;
            val resultIntent: Intent= Intent().putExtra("BRCode", resultText)
            setResult(1, resultIntent)
            finish()
        }
    }
    

    这个布局视图:

    activity_scanner.xml

    <?xml version="1.0" encoding="utf-8"?>
    
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <FrameLayout
                android:id="@+id/content_frame"
                android:layout_weight="1"
                android:layout_width="match_parent"
                android:layout_height="0dp" />
            <LinearLayout
                android:orientation="horizontal"
                android:gravity="center"
                android:background="#222"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
    
                <Switch
                        android:id="@+id/switchFlash"
                        android:layout_width="0dp"
                        android:layout_height="65dp"
                        android:layout_weight="1"
                        android:text="@string/flashValue"
                        android:textColor="?attr/colorBackgroundFloating"
                        android:paddingLeft="300dp" android:layout_gravity="center"/>
    
    
            </LinearLayout>
        </LinearLayout>
    
    </LinearLayout>
    

    并从您的 MainActivity 中像这样调用

        scanView.setOnClickListener {
            scanQRCode()
        }
    
    fun scanQRCode(){
        val intent = Intent(this, ScanActivity::class.java)
        startActivityForResult(intent, 2)
    }
    
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (data == null) {
            showIncorrectQRCodeDialogue()
            return
        }
    
        if (data.getStringExtra("BRCode")!=null) {
    
            val brCode: String = data.getStringExtra("BRCode")
    
    
               val intent = Intent(this, NewActivity::class.java);
    
               startActivity(intent);
    
        }else {
            showIncorrectQRCodeDialogue()
        }
    }
    

    您将能够根据您的自定义要求编辑扫描布局和扫描活动类。

    我希望这对您有所帮助。编码愉快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多