- 这是一个基于ZXing的二维码扫描框架,kotlin代码编写,提供View作为扫描控件,适用于Activity和Fragment,样式可自定义.
-
在你的module的build.gradle文件
implementation 'com.log1992:qrcodelib:0.0.1'
<dependency> <groupId>com.log1992</groupId> <artifactId>qrcodelib</artifactId> <version>0.0.1</version> <type>pom</type> </dependency>
<dependency org='com.log1992' name='qrcodelib' rev='0.0.1'> <artifact name='qrcodelib' ext='pom' ></artifact> </dependency>
allprojects { repositories { maven {url 'https://dl.bintray.com/qq2519157/maven'} } }
-
compileOnly 'com.android.support:appcompat-v7:27.1.1' api 'com.google.zxing:core:3.3.3'
-
<com.sencent.qrcodelib.CaptureView android:id="@+id/cv_qrcode" android:layout_width="match_parent" android:layout_height="wrap_content" app:cv_text="@string/tips_scan_code" app:cv_textSize="14sp" app:cv_frameColor="#32b16c" app:cv_cornerColor="#32b16c" app:cv_topOffset="-200" app:cv_resultPointColor="@color/colorAccent" app:cv_textLocation="bottom" app:cv_laserColor="#32b16c" />
cv_text 扫描框底部提示文字 cv_textSize 扫描框底部文字大小 cv_maskColor 边框阴影区域颜色 cv_frameColor 扫描区域边框颜色 cv_cornerColor 四角颜色 cv_laserColor 扫描线颜色 cv_resultPointColor 结果点的颜色 cv_topOffset 扫描框向上偏移量(在不同容器中,扫描区域位置可能有所偏移)
class TestActivity : AppCompatActivity(), ScanListener{ override fun onFinish() { } override fun onSuccess(result: String) { } override fun onError(errorCode: Int) { } override fun onResume() { captureView?.onResume() super.onResume() } override fun onPause() { captureView?.onPause() super.onPause() } override fun onDestroy() { captureView?.onDestroy() super.onDestroy() } }
class ScanFragment : Fragment(), ScanListener { override fun onDestroy() { mCaptureView?.onDestroy() super.onDestroy() } override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) if (isVisibleToUser) { mCaptureView?.onResume() Log.i(TAG, "onResume") } else { mCaptureView?.onPause() Log.i(TAG, "onPause") } } override fun onFinish() { } override fun onSuccess(result: String) { } override fun onError(errorCode: Int) { } }
-
- 必须实现Scanlistener接口,回调来处理扫描的结果
- 需要自己处理相机权限,特别是6.0+动态权限处理
- onError中的errorCode目前只有两个:CaptureView.CAMERA_ERROR和CaptureView.BEEP_MANAGER_ERROR,我的处理如下(仅供参考)
override fun onError(errorCode: Int) { when (errorCode) { CaptureView.CAMERA_ERROR -> Toast.makeText(context,"相机加载异常,无法正常使用",Toast.LENGTH_SHORT).show() CaptureView.BEEP_MANAGER_ERROR -> { } else -> activity?.finish() } activity?.finish() }