1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Android 扫描 生成 识别二维码 条码 一库搞定

Android 扫描 生成 识别二维码 条码 一库搞定

时间:2021-02-01 15:55:29

相关推荐

Android 扫描 生成 识别二维码 条码 一库搞定

他来了,他来了,他带着YXing走来了。

YXing 集成了CameraX + zxing, 简洁调用,功能完善,自定义扫码界面,再也不用像以前一样cv一堆冗余的Camera代码进项目了。

怎么集成:

1.在根目录的build.gradle中添加jitpack依赖:

allprojects {repositories {maven { url "https://jitpack.io" }}}

2.在project的build.gradle中添加YXing依赖:

implementation 'com.github.amggg:YXing:V1.1.1'

功能:

1、扫描二维码、条形码。

2、生成二维码,带logo二维码 、条形码。

3、识别相册内二维码图片。

注意事项:

1.在进入扫码界面前, 自行动态请求相机权限。

2.minSdk >= 21 (android5.0 及以上)。

3.AndroidX。

如何使用:

1.简单调用:

Activity中启动:

ScanCodeConfig.create(MainActivity.this)//设置扫码页样式 ScanStyle.NONE:无 ScanStyle.QQ :仿QQ样式 ScanStyle.WECHAT :仿微信样式 ScanStyle.CUSTOMIZE : 自定义样式.setStyle(style)//扫码成功是否播放音效 true : 播放 false : 不播放.setPlayAudio(false).buidler()//跳转扫码页 扫码页可自定义样式.start(ScanCodeActivity.class);

Fragment中启动:

ScanCodeConfig.create(MainActivity.this, mFragment)//设置扫码页样式 ScanStyle.NONE:无 ScanStyle.QQ :仿QQ样式 ScanStyle.WECHAT :仿微信样式 ScanStyle.CUSTOMIZE : 自定义样式.setStyle(style)//扫码成功是否播放音效 true : 播放 false : 不播放.setPlayAudio(false).buidler()//跳转扫码页 扫码页可自定义样式.start(ScanCodeActivity.class);

获取扫码结果:

@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);//接收扫码结果if(resultCode == RESULT_OK && requestCode == ScanCodeConfig.QUESTCODE && data != null){Bundle extras = data.getExtras();if(extras != null){String code = extras.getString(ScanCodeConfig.CODE_KEY);tvCode.setText(String.format("%s%s", "结果: " , code));}}}

内置两种样式可供使用, 通过setStyle方法 设置。

1、仿 QQ

2、仿微信

通过设置style 为 ScanStyle.CUSTOMIZE 进行自定义样式设计:

ScanCodeConfig.create(MainActivity.this)//设置扫码页样式 ScanStyle.NONE:无 ScanStyle.QQ :仿QQ样式 ScanStyle.WECHAT :仿微信样式 ScanStyle.CUSTOMIZE : 自定义样式.setStyle(ScanStyle.CUSTOMIZE)//扫码成功是否播放音效 true : 播放 false : 不播放.setPlayAudio(true)//设置音效音频.setAudioId(R.raw.beep)//以下配置 在style为 ScanStyle.CUSTOMIZE 时生效//设置扫码框位置 left : 边框左边位置 top : 边框上边位置 right : 边框右边位置 bottom : 边框下边位置 单位/dp//.setScanRect(new ScanRect(50, 200, 300, 450), false)//是否限制识别区域为设定扫码框大小 true:限制 false:不限制 默认false:识别区域为整个屏幕.setLimitRect(true)//设置扫码框位置 scanSize : 扫码框大小 offsetX : x轴偏移量 offsetY :y轴偏移量 单位 /px.setScanSize(800, 0, -200)//是否显示边框上四个角标 true : 显示 false : 不显示.setShowFrame(true)//设置边框上四个角标颜色.setFrameColor(R.color.whilte)//设置边框上四个角标圆角 单位 /dp.setFrameRaduis(2)//设置边框上四个角宽度 单位 /dp.setFrameWith(4)//设置边框上四个角长度 单位 /dp.setFrameLenth(15)//设置是否显示边框外部阴影 true : 显示 false : 不显示.setShowShadow(true)//设置边框外部阴影颜色.setShaowColor(R.color.black_tran30)//设置扫码条运动方式 ScanMode.REVERSE : 往复运动 ScanMode.RESTART :重复运动 默认ScanMode.RESTART.setScanMode(ScanMode.REVERSE)//设置扫码条扫一次时间 单位/ms 默认3000.setScanDuration(3000)//设置扫码条图片.setScanBitmapId(R.mipmap.scan_wechatline)//.buidler()//跳转扫码页 扫码页可自定义样式.start(MyScanActivity.class);

由于扫码界面一般会有很多不同的业务逻辑,所以可以根据需求自定义扫码界面:

自定义扫码界面流程:

1.新建Activity 继承 ScanCodeActivity

public class MyScanActivity extends ScanCodeActivity

2.重写getLayoutId() 和 initData() 方法

getLayoutId返回你自己定义的布局文件id

initData() 和平常一样 初始化数据 监听等等

public class MyScanActivity extends ScanCodeActivity {private AppCompatButton btnOpenFlash;@Overridepublic int getLayoutId() {return R.layout.activity_myscan;}@Overridepublic void initData() {super.initData();btnOpenFlash = findViewById(R.id.btn_openflash);btnOpenFlash.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {isOpenFlash = !isOpenFlash;setFlashStatus(isOpenFlash);btnOpenFlash.setText(isOpenFlash ? "关闭闪光灯" : "打开闪光灯");}});}}

3.布局文件中先将下面代码复制进去:

<RelativeLayoutxmlns:android="/apk/res/android"android:id="@+id/rlparent"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><androidx.camera.view.PreviewViewandroid:id="@+id/pvCamera"android:layout_width="match_parent"android:layout_height="match_parent" /><!--开始自定义界面--></RelativeLayout>

PreviewView是扫码界面, 下面可以任意添加自己的布局了:

下面尝试一下:

<RelativeLayoutxmlns:android="/apk/res/android"android:id="@+id/rlparent"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><androidx.camera.view.PreviewViewandroid:id="@+id/pvCamera"android:layout_width="match_parent"android:layout_height="match_parent" /><!--开始自定义界面--><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/btn_openflash"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="打开闪光灯"android:layout_alignParentBottom="true"/></RelativeLayout>

4.start()方法参数 替换成自定义的Activity:

ScanCodeConfig.create(MainActivity.this)//设置扫码页样式 ScanStyle.NONE:无 ScanStyle.QQ :仿QQ样式 ScanStyle.WECHAT :仿微信样式.setStyle(style)//扫码成功是否播放音效 true : 播放 false : 不播放.setPlayAudio(true).buidler()//跳转扫码页 扫码页可自定义样式.start(MyScanActivity.class);

预览一下:

除了扫码功能外,还可以生成二维码:

1.单独的二维码:

Bitmap bitmap = ScanCodeConfig.createQRCode("star");

2.带logo的二维码:

Bitmap bitmap = ScanCodeConfig.createQRcodeWithLogo("star", BitmapFactory.decodeResource(getResources(), R.mipmap.timg));

3.生成带描边logo二维码

Bitmap bitmap = ScanCodeConfig.createQRcodeWithStrokLogo("star", SizeUtils.dp2px(getApplicationContext(), 200), BitmapFactory.decodeResource(getResources(), R.mipmap.timg), SizeUtils.dp2px(getApplicationContext(), 60), SizeUtils.dp2px(getApplicationContext(), 60), SizeUtils.dp2px(getApplicationContext(), 10), SizeUtils.dp2px(getApplicationContext(), 10), SizeUtils.dp2px(getApplicationContext(), 2), ContextCompat.getColor(MainActivity.this, R.color.colorAccent));

二维码宽高, logo宽高, 圆角都可以自行设置:

/*** 生成二维码** @param text 需要生成二维码的文字、网址等* @param size 需要生成二维码的大小()* @return bitmap*/public static Bitmap createQRCode(String text, int size) {

/** 生成带logo 二维码* @param text 文字* @param size 二维码大小 1 :1* @param logo logo* @param logoWith logo宽* @param logoHigh logo高* @param logoRaduisX logo x圆角* @param logoRaduisY logo y圆角* @return*/public static Bitmap createQRcodeWithLogo(String text, int size, Bitmap logo, int logoWith, int logoHigh, float logoRaduisX, float logoRaduisY){

/** 生成带描边logo 二维码* @param text 文字* @param size 二维码大小 1 :1* @param logo logo* @param logoWith logo宽* @param logoHigh logo高* @param logoRaduisX logo x圆角* @param logoRaduisY logo y圆角* @param storkWith 描边宽度* @param storkColor 描边颜色* @return*/public static Bitmap createQRcodeWithStrokLogo(String text, int size, Bitmap logo, int logoWith, int logoHigh, float logoRaduisX, float logoRaduisY, int storkWith, int storkColor){

除了生成二维码, 从相册识别二维码也是必不可少的:

调用以下方法, 把选中的图片uri传进去 就可以获取到二维码的内容了。。

/*** 解码uri二维码图片* @return*/public static String scanningImage(Activity mActivity, Uri uri) {

4.生成条形码

Bitmap barCode = ScanCodeConfig.createBarcode("234323423423", 500, 200, false);

可配置条形码的宽高,是否在条码下方显示内容。

注意:条码内容不可为 中文。

/*** 生成条形码* @param content 要生成条形码包含的内容* @param widthPix 条形码的宽度* @param heightPix 条形码的高度* @param isShowContent 是否显示条形码包含的内容* @return 返回生成条形的位图*/public static Bitmap createBarcode(String content, int widthPix, int heightPix, boolean isShowContent) {

打完 收工~~~

github 内有app 下载链接

技术不强, 重在整理, 不喜勿喷。

附上github链接:/amggg/YXing

star star star

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。