精华内容
下载资源
问答
  • :person_running: BGAQRCode-Android :person_running: 目录 功能介绍 根据的产品需求,参考扫描仪改版,希望能帮助到生成二维码,扫描二维码,识别图片二维码等需求的猿友。修改幅度,也就没准备针对扫描仪库提交PR...
  • :person_running:BGAQRCode-Android:person_running: 目录 功能介绍 根据的产品需求,参考 改的,希望能帮助到有生成二维码、扫描二维码、识别图片二维码等需求的猿友。修改幅度较大,也就没准备针对 库提交PR。 可...
  • 很好的二维码扫描第三方库BGAQRCode-android只提供了AS的依赖使用,对于一些还在使用eclipse的童鞋,不熟悉的还是有点无奈,这里我将它封装成了eclipse可以直接使用的依赖库,只需导入eclipse,添加相应的权限和...
  • Android二维码开源库—BGAQRCode-Android的使用 QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信、QQ 二维码扫描样式。他把Zbar和Zxing,都做了优化,扫描速度非常快,用户...

    BGAQRCode-Android

    QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信、QQ 二维码扫描样式。他把Zbar和Zxing,都做了优化,扫描速度非常快,用户体验很好,用起来也非常方便


    添加依赖

    implementation 'cn.bingoogolapple:bga-qrcode-zbar:1.3.7'
    或者
    implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.7'
    

    用法

    1.自行添加xml文件里属性,具体属性说明可在https://github.com/bingoogolapple/BGAQRCode-Android查看

    <cn.bingoogolapple.qrcode.zxing.ZXingView
        android:id="@+id/mZXingView"
        style="@style/MatchMatch"
        app:qrcv_animTime="1000"
        app:qrcv_borderColor="@android:color/white"
        app:qrcv_borderSize="1dp"
        app:qrcv_cornerColor="@color/colorPrimaryDark"
        app:qrcv_cornerLength="20dp"
        app:qrcv_cornerSize="3dp"
        app:qrcv_maskColor="#33FFFFFF"
        app:qrcv_rectWidth="200dp"
        app:qrcv_scanLineColor="@color/colorPrimaryDark"
        app:qrcv_scanLineSize="1dp"
        app:qrcv_topOffset="90dp" />
    

    2.AndroidManifest文件里添加相应权限

    <uses-permission android:name="android.permission.CAMERA"/>
    

    3.在对应的activity进行操作

    	override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            if (Build.VERSION.SDK_INT >= 23) {
                checkAndRequestPermission()
            }
        }
    
    	/**
         * 动态添加相机权限
         */
        @TargetApi(Build.VERSION_CODES.M)
        fun checkAndRequestPermission() {
            val permission = arrayOf(Manifest.permission.CAMERA)
            if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(permission, 1024)
            } else {
                mZXingView.setDelegate(this)
            }
        }
    
        @RequiresApi(Build.VERSION_CODES.M)
        override fun onRequestPermissionsResult(
            requestCode: Int,
            permissions: Array<out String>,
            grantResults: IntArray
        ) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults)
            when (requestCode) {
                1024 -> {
                    val permission = arrayOf(Manifest.permission.CAMERA)
                    val shouldFalse = shouldShowRequestPermissionRationale(permission[0])
                    if (shouldFalse) {
                        initDialog()
                    }
                }
            }
        }
    
    	@RequiresApi(Build.VERSION_CODES.M)
        override fun onResume() {
            launch(Dispatchers.IO){
                if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
                    mZXingView.startSpotAndShowRect() // 显示扫描框,并开始识别
                }
            }
            super.onResume()
        }
    
        private fun initDialog() {
            val dialog = AlertDialog.Builder(this)
                .setTitle("权限申请")
                .setMessage(getString(R.string.per_tip))
                .setNegativeButton(android.R.string.cancel) { dialog, which ->
                    dialog.dismiss()
                }
                .setPositiveButton(getString(R.string.set_tip)) { dialog, which ->
                    val intent = Intent()
                    //进入系统应用设置
                    intent.action = "android.settings.APPLICATION_DETAILS_SETTINGS"
                    intent.data = Uri.fromParts("package", packageName, null)
                    startActivity(intent)
                    finish()
                }
                .create().show()
        }
    
        override fun onStart() {
            mZXingView.startCamera() // 打开后置摄像头开始预览,但是并未开始识别
            super.onStart()
        }
    
    
        override fun onScanQRCodeSuccess(result: String?) {
            mZXingView.startSpot()
            finish()
        }
    
        override fun onCameraAmbientBrightnessChanged(isDark: Boolean) {
            // 这里是通过修改提示文案来展示环境是否过暗的状态,接入方也可以根据 isDark 的值来实现其他交互效果
            var tipText = mZXingView.scanBoxView.tipText
            val ambientBrightnessTip = "\n环境过暗,请打开闪光灯"
            if (isDark) {
                if (!tipText.contains(ambientBrightnessTip)) {
                    mZXingView.scanBoxView.tipText = tipText + ambientBrightnessTip
                }
            } else {
                if (tipText.contains(ambientBrightnessTip)) {
                    tipText = tipText.substring(0, tipText.indexOf(ambientBrightnessTip))
                    mZXingView.scanBoxView.tipText = tipText
                }
            }
        }
    
    
        override fun onScanQRCodeOpenCameraError() {
    
        }
    
        override fun onStop() {
            mZXingView.stopCamera() // 关闭摄像头预览,并且隐藏扫描框
            super.onStop()
        }
    
        override fun onDestroy() {
            mZXingView.onDestroy() // 销毁二维码扫描控件
            super.onDestroy()
        }
    

    展开全文
  • BGAQRCode-Android

    千次阅读 2017-08-09 09:57:30
    原文地址:...项目地址:bingoogolapple/BGAQRCode-Android 简介:ZXing 生成二维码 ZXing 扫描二维码 ZXing 识别图库中的二维码图片 可以控制闪光灯,

    原文地址:http://p.codekk.com/detail/Android/bingoogolapple/BGAQRCode-Android


    BGAQRCode-Android

    简介:ZXing 生成二维码
    ZXing 扫描二维码
    ZXing 识别图库中的二维码图片
    可以控制闪光灯,方便夜间使用
    可以定制各式各样的扫描框
    ZBar 扫描二维码「扫描中文会有乱码,如果对中文有要求,请使用 ZXing」
    更多: 作者    提 Bug    示例 APK   
    标签:
    二维码-

    目录

    功能介绍

    根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到有生成二维码、扫描二维码、识别图片二维码等需求的猿友。修改幅度较大,也就没准备针对 barcodescanner 库提交 PR。

    • [x] ZXing 生成可自定义颜色、带 logo 的二维码
    • [x] ZXing 扫描二维码
    • [x] ZXing 识别图库中的二维码图片
    • [x] 可以设置用前置摄像头扫描
    • [x] 可以控制闪光灯,方便夜间使用
    • [x] 可以定制各式各样的扫描框
    • [x] 可定制全屏扫描或只识别扫描框区域内的二维码
    • [x] ZBar 扫描二维码「扫描中文会有乱码,如果对中文有要求,请使用 ZXing」

    常见问题

    1.部分手机无法扫描出结果,扫描预览界面二维码被压缩

    使用的时候将 Toolbar 或者其他 View 盖在 ZBarView 或者 ZXingView 的上面,让 ZBarView 或者 ZXingView 填充屏幕宽高。ZXing 布局文件参考 ZBar 布局文件参考

    2.Gradle 依赖时提示找不到 cn.bingoogolapple:bga-libraryname:「latestVersion」@aar

    Maven Central 「latestVersion」指的是左边这个 maven-central 徽章后面的「数字」,请自行替换。请不要再来问我「latestVersion」是什么了

    效果图与示例 apk

    zbar109 zxingbarcode109 zxingdecode109 zxingqrcode109 iqegg

    点击下载 ZXingDemo.apk或扫描下面的二维码安装 点击下载 ZBarDemo.apk或扫描下面的二维码安装
    ZXingDemo apk 文件二维码 ZBarDemo apk 文件二维码

    Gradle 依赖

    Maven Central 「latestVersion」指的是左边这个 maven-central 徽章后面的「数字」,请自行替换。

    ZXing

    dependencies {
        compile 'com.google.zxing:core:3.2.1'
        compile 'cn.bingoogolapple:bga-qrcodecore:latestVersion@aar'
        compile 'cn.bingoogolapple:bga-zxing:latestVersion@aar'
    }
    

    ZBar

    dependencies {
        compile 'cn.bingoogolapple:bga-qrcodecore:latestVersion@aar'
        compile 'cn.bingoogolapple:bga-zbar:latestVersion@aar'
    }
    

    布局文件

    ZXing

    <cn.bingoogolapple.qrcode.zxing.ZXingView
        android:id="@+id/zxingview"
        style="@style/MatchMatch"
        app:qrcv_animTime="1000"
        app:qrcv_borderColor="@android:color/white"
        app:qrcv_borderSize="1dp"
        app:qrcv_cornerColor="@color/colorPrimaryDark"
        app:qrcv_cornerLength="20dp"
        app:qrcv_cornerSize="3dp"
        app:qrcv_maskColor="#33FFFFFF"
        app:qrcv_rectWidth="200dp"
        app:qrcv_scanLineColor="@color/colorPrimaryDark"
        app:qrcv_scanLineSize="1dp"
        app:qrcv_topOffset="90dp" />
    

    ZBar

    <cn.bingoogolapple.qrcode.zbar.ZBarView
        android:id="@+id/zbarview"
        style="@style/MatchMatch"
        app:qrcv_animTime="1000"
        app:qrcv_borderColor="@android:color/white"
        app:qrcv_borderSize="1dp"
        app:qrcv_cornerColor="@color/colorPrimaryDark"
        app:qrcv_cornerLength="20dp"
        app:qrcv_cornerSize="3dp"
        app:qrcv_isShowDefaultScanLineDrawable="true"
        app:qrcv_maskColor="#33FFFFFF"
        app:qrcv_rectWidth="200dp"
        app:qrcv_scanLineColor="@color/colorPrimaryDark"
        app:qrcv_topOffset="90dp" />
    

    自定义属性说明

    属性名 说明 默认值
    qrcv_topOffset 扫描框距离 toolbar 底部的距离 90dp
    qrcv_cornerSize 扫描框边角线的宽度 3dp
    qrcv_cornerLength 扫描框边角线的长度 20dp
    qrcv_cornerColor 扫描框边角线的颜色 @android:color/white
    qrcv_rectWidth 扫描框的宽度 200dp
    qrcv_barcodeRectHeight 条码扫样式描框的高度 140dp
    qrcv_maskColor 除去扫描框,其余部分阴影颜色 #33FFFFFF
    qrcv_scanLineSize 扫描线的宽度 1dp
    qrcv_scanLineColor 扫描线的颜色「扫描线和默认的扫描线图片的颜色」 @android:color/white
    qrcv_scanLineMargin 扫描线距离上下或者左右边框的间距 0dp
    qrcv_isShowDefaultScanLineDrawable 是否显示默认的图片扫描线「设置该属性后 qrcv_scanLineSize 将失效,可以通过 qrcv_scanLineColor 设置扫描线的颜色,避免让你公司的 UI 单独给你出特定颜色的扫描线图片」 false
    qrcv_customScanLineDrawable 扫描线的图片资源「默认的扫描线图片样式不能满足你的需求时使用,设置该属性后 qrcv_isShowDefaultScanLineDrawable、qrcv_scanLineSize、qrcv_scanLineColor 将失效」 null
    qrcv_borderSize 扫描边框的宽度 1dp
    qrcv_borderColor 扫描边框的颜色 @android:color/white
    qrcv_animTime 扫描线从顶部移动到底部的动画时间「单位为毫秒」 1000
    qrcv_isCenterVertical 扫描框是否垂直居中,该属性为 true 时会忽略 qrcv_topOffset 属性 false
    qrcv_toolbarHeight Toolbar 的高度,通过该属性来修正由 Toolbar 导致扫描框在垂直方向上的偏差 0dp
    qrcv_isBarcode 是否是扫条形码 false
    qrcv_tipText 提示文案 null
    qrcv_tipTextSize 提示文案字体大小 14sp
    qrcv_tipTextColor 提示文案颜色 @android:color/white
    qrcv_isTipTextBelowRect 提示文案是否在扫描框的底部 false
    qrcv_tipTextMargin 提示文案与扫描框之间的间距 20dp
    qrcv_isShowTipTextAsSingleLine 是否把提示文案作为单行显示 false
    qrcv_isShowTipBackground 是否显示提示文案的背景 false
    qrcv_tipBackgroundColor 提示文案的背景色 #22000000
    qrcv_isScanLineReverse 扫描线是否来回移动 true
    qrcv_isShowDefaultGridScanLineDrawable 是否显示默认的网格图片扫描线 false
    qrcv_customGridScanLineDrawable 扫描线的网格图片资源 nulll
    qrcv_isOnlyDecodeScanBoxArea 是否只识别扫描框区域的二维码 false

    接口说明

    QRCodeView

    /**
     * 设置扫描二维码的代理
     *
     * @param delegate 扫描二维码的代理
     */
    public void setDelegate(Delegate delegate)
    
    /**
     * 显示扫描框
     */
    public void showScanRect()
    
    /**
     * 隐藏扫描框
     */
    public void hiddenScanRect()
    
    /**
     * 打开后置摄像头开始预览,但是并未开始识别
     */
    public void startCamera()
    
    /**
     * 打开指定摄像头开始预览,但是并未开始识别
     *
     * @param cameraFacing  Camera.CameraInfo.CAMERA_FACING_BACK or Camera.CameraInfo.CAMERA_FACING_FRONT
     */
    public void startCamera(int cameraFacing)
    
    /**
     * 关闭摄像头预览,并且隐藏扫描框
     */
    public void stopCamera()
    
    /**
     * 延迟 1.5 秒后开始识别
     */
    public void startSpot()
    
    /**
     * 延迟 delay 毫秒后开始识别
     *
     * @param delay
     */
    public void startSpotDelay(int delay)
    
    /**
     * 停止识别
     */
    public void stopSpot()
    
    /**
     * 停止识别,并且隐藏扫描框
     */
    public void stopSpotAndHiddenRect()
    
    /**
     * 显示扫描框,并且延迟 1.5 秒后开始识别
     */
    public void startSpotAndShowRect()
    
    /**
     * 打开闪光灯
     */
    public void openFlashlight()
    
    /**
     * 关闭散光灯
     */
    public void closeFlashlight()
    

    QRCodeView.Delegate 扫描二维码的代理

    /**
     * 处理扫描结果
     *
     * @param result
     */
    void onScanQRCodeSuccess(String result)
    
    /**
     * 处理打开相机出错
     */
    void onScanQRCodeOpenCameraError()
    

    QRCodeDecoder 解析二维码图片。几个重载方法都是耗时操作,请在子线程中调用。

    /**
     * 同步解析本地图片二维码。该方法是耗时操作,请在子线程中调用。
     *
     * @param picturePath 要解析的二维码图片本地路径
     * @return 返回二维码图片里的内容 或 null
     */
    public static String syncDecodeQRCode(String picturePath)
    
    /**
     * 同步解析 bitmap 二维码。该方法是耗时操作,请在子线程中调用。
     *
     * @param bitmap 要解析的二维码图片
     * @return 返回二维码图片里的内容 或 null
     */
    public static String syncDecodeQRCode(Bitmap bitmap)
    

    QRCodeEncoder 创建二维码图片。几个重载方法都是耗时操作,请在子线程中调用。

    /**
     * 同步创建黑色前景色、白色背景色的二维码图片。该方法是耗时操作,请在子线程中调用。
     *
     * @param content 要生成的二维码图片内容
     * @param size    图片宽高,单位为 px
     */
    public static Bitmap syncEncodeQRCode(String content, int size)
    
    /**
     * 同步创建指定前景色、白色背景色的二维码图片。该方法是耗时操作,请在子线程中调用。
     *
     * @param content         要生成的二维码图片内容
     * @param size            图片宽高,单位为 px
     * @param foregroundColor 二维码图片的前景色
     */
    public static Bitmap syncEncodeQRCode(String content, int size, int foregroundColor)
    
    /**
     * 同步创建指定前景色、白色背景色、带 logo 的二维码图片。该方法是耗时操作,请在子线程中调用。
     *
     * @param content         要生成的二维码图片内容
     * @param size            图片宽高,单位为 px
     * @param foregroundColor 二维码图片的前景色
     * @param logo            二维码图片的 logo
     */
    public static Bitmap syncEncodeQRCode(String content, int size, int foregroundColor, Bitmap logo)
    
    /**
     * 同步创建指定前景色、指定背景色、带 logo 的二维码图片。该方法是耗时操作,请在子线程中调用。
     *
     * @param content         要生成的二维码图片内容
     * @param size            图片宽高,单位为 px
     * @param foregroundColor 二维码图片的前景色
     * @param backgroundColor 二维码图片的背景色
     * @param logo            二维码图片的 logo
     */
    public static Bitmap syncEncodeQRCode(String content, int size, int foregroundColor, int backgroundColor, Bitmap logo)
    

    详细用法请查看ZBarDemo:feet:

    详细用法请查看ZXingDemo:feet:

    关于我

    新浪微博 个人主页 邮箱 BGA 系列开源库 QQ 群
    bingoogolapple bingoogolapple.cn bingoogolapple@gmail.com BGA_CODE_CLUB


    展开全文
  • https://github.com/bingoogolapple/BGAQRCode-Android 上述项目可以实现二维码和条形码的扫描,以及扫描界面的定制,经过个人实验,二维码的部分全部可以实现,条形码的部分个人没有实验过,没有发言权。 项目结构 ...

    首先声明,本笔记是在下面这位大佬的代码基础上改的,本人会将实现过程中出现的问题和经验写在下面,本笔记可以结合github上作者的readme一起看:

    https://github.com/bingoogolapple/BGAQRCode-Android

    上述项目可以实现二维码和条形码的扫描,以及扫描界面的定制,经过个人实验,二维码的部分全部可以实现,条形码的部分个人没有实验过,没有发言权。

    项目结构

    该项目使用两种库同时实现了二维码和条形码的扫描,分别是ZXing和ZBar,本人只实验了ZXing,所有后面所述全部关于ZXing。

    ZXing包括两个文件夹,分别是zxingzxingdemo,其中zxing是扫描二维码所用的库,而zxingdemo则是界面文件,所以如果想做修改,只需要在zxingdemo里进行修改即可。

    zxingdemo里包括4个文件,与之对应的layout文件分别为:

    • MainActivity.java —— activity_main.xml :主界面,包括两个按键的点击事件,以及相机闪光灯权限的申请
    • RotateTest.java:这个文件我没用上,不知道是干什么的
    • TestGeneratectivity.java —— activity_test_generate.xml:生成二维码的界面,里面有各类生成二维码的函数
    • TestScanActivity.java ——activity_test_scan:二维码扫描界面,该项目重头戏!!该项目是使用自定义的ZXingView组件来实现二维码扫描框的。该组件可以对扫描框进行各种各样的设置,包括框大小、颜色等等。同时使用BGAFlowLayout组件来实现人机交互,可以在该组件上放置各种元件,并在TestScanActivity.java文件里设置对应的点击事件。包括对扫描结果的处理,也是在这个文件内完成的,在这个文件里有一个onScanQRCodeSuccess函数,只要把想要扫描后的反应写在这里即可。

    以上为项目的zxing部分的整体结构,经过本人实验可以运行,不过在github上的工程移到自己电脑里难免需要一些修改,修改如下:

    项目本地化修改

    在本地化途中,如果Android studio版本不够高,是打不开工程的,我用的版本是Android Studio Arctic Fox | 2020.3.1 Patch 3,这个版本是可行的。

    然后会出现这个错误 java.lang.ClassNotFoundException: javax.xml.bind.JAXBException ,网上有人说要使用jdk 8(也就是1.8?),不过我已经是1.8了;其次有人说gradle需要7.0.2版本(error:Unable to load class ‘javax.xml.bind.JAXBException‘.),这个在File→Project Structure→Project里面可以更改,说实话那里面有Android Gradle Plugin Version和Gradle Version两项,我也分不清有啥区别,反正我两个都改了,在修改的途中Android studio需要自动下载些东西,需要一些时间。我用的版本分别是7.0.3和7.0.2。这两样东西在文件里的位置分别在build.gradle和gradle→wrapper→gradle-wrapper.properties里面,具体如下图:

    Android Gradle Plugin Version
    Gradle Version
    解决完这个后,会报 apply plugin: ‘com.github.dcendents.android-maven’ 这个错误,我看网上说是因为不同的gradle版本需要不同marven-gradle-plugin版本(这个marven-gradle-plugin就是上面图1里被我注释掉的那个包),在网上查了一大堆资料,也没能解决问题,想要找到对应的版本也没有找到,替换了其他版本又说找不到包,最后索性把引用包的那句话注释掉了(见图1)。

    不过这样做会又会引起新的bug,类似于org.gradle.api.publication.maven.internal.MavenPomMetaInfoProvider,解决这个问题的方法是删除这样一句话apply plugin: ‘com.github.dcendents.android-maven’(详见无法加载类“org.gradle.api.publication.maven.internal.MavenPomMetaInfoProvider”
    ),这句话出现在qrcodecore→build.gradle、zbar→build.gradle和zxing→build.gradle三个文件的开头位置。不过这么删除在上传项目时也许又会出问题,管它呢,反正本地跑没问题。

    上述问题都解决之后,就可以运行文件了,不管是在虚拟机还是实机上都可以(本人是Android 9手机,所以只保证Android 9可以运行)

    个人感受

    Android 的拓展性真的太强了,各种包来回引用,对于不太会java的人来说真的很折磨,本人作为几乎0基础的人来做这个真的花了很多时间。

    一开始使用的是这个项目yipianfengye/android-zxingLibrary,不过这个项目是16年的项目,对于Android 9来说有些过时了,而且这个工程里二维码扫描部分是封在jar里的,看着很不方便。

    在运行项目的过程中,闪光灯可谓一个大问题,我一开始使用的那个项目里的闪光灯代码失效了。然后我就去各种找资料,说什么需要权限;Android 5.0之后android.hardware.Camera就失效了(然而并没有,新项目里还是使用了这个);还有人说Android 7.0之后需要使用SurfaceHolder.Callback 接口和SurfaceVIew才能让闪光灯亮(android 7.0 打开闪光灯失效原因,经过看代码,新项目里的确使用了public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback 不过具体干啥的,我也看不懂)。搞的人头大,幸好最后在新项目里都实现了。

    结语

    不管怎么说,都感谢两位上传github项目的程序员前辈,希望我写的这些东西可以帮助同样有需要的人。

    展开全文
  • BGAQRCode扫描二维码

    2017-11-23 16:41:21
    最近在检查内存泄漏 发现之前使用得扫码工具一只存在泄漏问题 在页面关闭后content继续被引用存在 没找到...使用zbar封装好的第三方 地址 https://github.com/bingoogolapple/BGAQRCode-Android 使用方式 上面写的

    最近在检查内存泄漏  发现之前使用得扫码工具一只存在泄漏问题 在页面关闭后content继续被引用存在 没找到好的解决办法 直接就换一个新得 在GitHub上翻了下 之前得依赖zbar 扫描速度明显比zxing快很多  所以就继续找个 使用zbar封装好的第三方  地址 https://github.com/bingoogolapple/BGAQRCode-Android

    使用方式 上面写的很清楚 作者发布了2个版本得包 一个依赖zxing  一个是zbar 我还是用zbar得 


    优点是页面容易定制 修改起来很方便 方法也都封装好了 调用方便 不过介绍上说有的机型 会扫码失败 还有可能会有黑屏 我还没有遇到 记录一下我使用的情况吧

    我用的应该是最新得版本了

    compile 'cn.bingoogolapple:bga-qrcodecore:1.1.9@aar'//二维码扫描
    compile 'cn.bingoogolapple:bga-zbar:1.1.9@aar'

    上个代码

    我做的是一个在viewpager中可以左右滑动的页面 所以是写在framgent里面得 因为是第二个子页面所以 会预加载将baseframgent 方法整理好


    public abstract class BaseFramgent extends Fragment {
    
        public String fragmentTitle;
        /**
         * 是否可见状态
         */
        private boolean isVisible = false;
        /**
         * 页面是否加载
         */
        private boolean isPrepared = false;
        /**
         * 数据是否第一次加载
         */
        private boolean isFirstLoad = true;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = initViews(inflater, container, savedInstanceState);
            isPrepared = true;
            lazyLoad();
            return view;
        }
    
        /**
         * 如果是与ViewPager一起使用,调用的是setUserVisibleHint
         * setUserVisibleHint 只有在Fragment切换的时候才被调用
         *
         * @param isVisibleToUser 是否显示出来了
         */
        @Override
        public void setUserVisibleHint(boolean isVisibleToUser) {
            super.setUserVisibleHint(isVisibleToUser);
            if (getUserVisibleHint()) {
                isVisible = true;
                onVisible();
                startThread();
            } else {
                isVisible = false;
                onInvisible();
            }
        }
    
        /**
         * 如果是通过FragmentTransactionshowhide的方法来控制显示,调用的是onHiddenChanged.
         * 若是初始就showFragment 为了触发该事件 需要先hideshow
         *
         * @param hidden hidden True if the fragment is now hidden, false if it is not
         *               visible.
         */
        @Override
        public void onHiddenChanged(boolean hidden) {
            super.onHiddenChanged(hidden);
            if (!hidden) {
                isVisible = true;
                onVisible();
                startThread();
            } else {
                isVisible = false;
                onInvisible();
            }
        }
    
        /*再次调用可见方法*/
        @Override
        public void onResume() {
            super.onResume();
            if (getUserVisibleHint()) {
                if (isFirstLoad) {
                    setUserVisibleHint(true);
                } else {
                    startThread();
                }
            }
        }
    
    
    
    
        /**
         * 可见时调用
         */
        protected void onVisible() {
            lazyLoad();
        }
    
        /**
         * 不可见调用
         */
        protected void onInvisible() {
            if (!isPrepared || isVisible) {
                //if (!isAdded() || !isVisible || !isFirstLoad) {
                return;
            } else {
                invisible();
            }
        }
    
        /**
         * 不可见时停止
         */
        protected abstract void invisible();
    
        /**
         * 加载
         */
        protected void lazyLoad() {
            Log.d("lazyLoad", "" + isPrepared + "," + isVisible + isFirstLoad);
            if (!isPrepared || !isVisible || !isFirstLoad) {
                //数据 isFirstLoad 如果为true
                return;
            } else {
                //当页面可见 初始化完成 数据未加载过
                isFirstLoad = false;
                initData();
            }
        }
    
        protected abstract View initViews(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
    
        /**
         * 布局加载得方法
         */
        protected abstract void initData();
    
        /**
         * 需要控制得线程
         *
         * @return
         */
        protected abstract void startThread();
    
        public String getTitle() {
            if (null == fragmentTitle) {
                setDefaultFragmentTitle(null);
            }
            return TextUtils.isEmpty(fragmentTitle) ? "" : fragmentTitle;
        }
    
        public void setTitle(String title) {
            fragmentTitle = title;
        }
    
        /**
         * 设置fragmentTitle直接调用,若不显示该title 可以不做处理
         *
         * @param title 一般用于显示在TabLayout的标题
         */
        protected abstract void setDefaultFragmentTitle(String title);
    
       }


    方法做了修改 本来在initData中是加载布局得 不过 我直接加载了 就没有使用 添加startthread方法是需要 控制在可见后 需要开启得线程 比如说扫描得方法 要不然直接开启会导致 在不可见状态 就可以扫码成功 还有一些震动 动画得管理 便于在不可见时停掉 可见得方法写的很清楚了 有两种 根据加载得方式 来选择使用 不明白俩个方法区别得可以百度下  framgent扫描得方法

    /**
     * Start camera.
     */
    private void startScan() {
    
        mQRCodeView.startSpot();
    
    }

    /**
     * Stop camera.
     */
    private void stopScan() {
        /**
         * 停止识别
         */
        if (null != mQRCodeView) {
            mQRCodeView.stopSpot();
        }
    }

    @Override
    public void onPause() {
        // Must be called here, otherwise the camera should not be released properly.
        stopScan();
        super.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        stopScan();
        mQRCodeView.stopCamera();
        mQRCodeView.onDestroy();
    }

    开启摄像头得方法 直接放在初始化中就可以 以免当使用时初始化出现黑屏闪动 测试有的手机初始化会闪黑屏

    mQRCodeView.startCamera();


    private void init() {
        flight = (ImageView) view.findViewById(R.id.flight);
        mQRCodeView = (ZBarView) view.findViewById(R.id.zbarview);
        mQRCodeView.setDelegate(this);
        flight.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                flashlight(flag);
            }
        });
    }


    /**
     * 灯光管理
     * @param b
     */
    private void flashlight(boolean b) {
        if (b) {
            //open
            mQRCodeView.openFlashlight();
            flight.setBackgroundResource(R.mipmap.isflight);
            flag = false;
        } else {
            //close
            mQRCodeView.closeFlashlight();
            flight.setBackgroundResource(R.mipmap.flight);
            flag = true;
        }
    }


    /**
     * 加载布局
     */
    @Override
    protected void initData() {
        Log.d("initData", "initData");
    }
    
    /**
     * 不可见
     */
    @Override
    protected void invisible() {
        Log.d("invisible", "invisible");
        stopScan();
        flashlight(false);
    }
    
    /**
     * 开启需要得线程
     */
    @Override
    protected void startThread() {
        Log.d("startThread", "startThread");
        startScan();
    }


    功能都有了 扫描时间比之前得稍微慢了一点 不过也可以 内存泄漏检测 有10几k 不需要考虑了 基本符合要求












    展开全文
  • BGAQRCode-Android的简单使用

    千次阅读 2017-04-02 00:16:57
    [url]https://github.com/bingoogolapple/BGAQRCode-Android依赖文件(demo中用到的有些可根据需求改变) compile 'com.google.zxing:core:3.2.1' compile 'cn.bingoogolapple:bga-qrcodecore:1.1.7@aar' compile '...
  • BGAQRCode 是 Android QRCode 库,主要有以下功能:ZXing 生成可自定义颜色、带 logo 的二维码ZXing 扫描二维码ZXing 识别图库中的二维码图片可以设置用前置摄像头扫描可以控制闪光灯,方便夜间使用可以定制各式各样...
  • Android二维码扫码ZXing,barcodescanner和BGAQRCode-Android技术比较 Android二维码扫描是一种常见的功能开发,但是技术选型不当会造成初期开发难度大、后期维护成本高。常见的Android二维码扫码解决方案很多,...
  • 全网最新最快,占用资源最少的二维码扫描框架 强烈推荐,速度快,占用资源少,安利安利 依赖文件(demo中用到的有些可根据需求改变) ...https://github.com/bingoogolapple/BGAQRCode-Android
  • BGAQRCode-Android 多样式扫描二维码

    千次阅读 2018-06-27 11:46:38
    下载链接:https://download.csdn.net/download/sinat_28238111/10502468目录功能介绍常见问题效果图与示例 apkGradle 依赖布局文件自定义属性说明接口说明关于我功能介绍根据之前公司的产品需求,参考 barcode...
  • BGAQRCod开源地址 使用步骤: 步骤1: app.gradle中引入 implementation '... 步骤2: 申请运行时权限,主要是: ...Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE ...我这边用的是P...
  • Android - BGAQRCode 扫描二维码生成二维码

    万次阅读 热门讨论 2016-10-23 13:31:06
    最新有二维码扫描需求,就研究了一下二维码扫描:找了很多项目目前觉得这个还是蛮好用的:https://github.com/bingoogolapple/BGAQRCode-Android 这里只是用到了ZXingDemo的代码二维码扫描功能 效果图: ...
  • 使用ZXing或者ZBar都试过了,扫描后中文变成了乱码,在作者的git开源项目里也没有找到解决方法。 最后解决方法是:查询乱码的原始编码,看看是什么编码,然后转回中文编码,最终问题解决。 二维码扫描结果如下: ...
  • QRcodeLib 做一个二维码支持库,生成二唯码来自QRGen,扫描二唯吗来自BGAQRCode-Android目地主要是看源码学习方便先前项目使用

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 287
精华内容 114
热门标签
关键字:

BGAQRCode

友情链接: table.rar