目前版本:2.2.5 GitHub:https://github.com/yuzhiqiang1993/zxing
效果图
- 在 project/build.gradle 中添加 allprojects 如下:
dependencies {
classpath "com.android.tools.build:gradle:4.1.2"
classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.0'
}
---------------------------------------------------------------------
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
- 在 app/build.gradle 中添加如下:
//Butter Knife
implementation 'com.jakewharton:butterknife:10.2.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'
implementation 'com.tbruyelle.rxpermissions2:rxpermissions:+'
implementation 'com.github.yuzhiqiang1993:zxing:2.2.5'
- 申请权限
使用
- activity_main.xml
- MainActivity.java
private static final int REQUEST_CODE_SCAN = 1001;
@BindView(R.id.btn_scan)
Button mScan;
@BindView(R.id.btn_create)
Button mCreate;
@BindView(R.id.iv_zxing)
ImageView mImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
new RxPermissions(this)
.request(Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Boolean aBoolean) {
Log.d("amy", "onNext: "+aBoolean);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
@OnClick({R.id.btn_scan,R.id.btn_create})
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_scan:
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
/*ZxingConfig是配置类 可以设置是否显示底部布局,闪光灯,相册,是否播放提示音 震动等动能
* 也可以不传这个参数
* 不传的话 默认都为默认不震动 其他都为true
* */
ZxingConfig config = new ZxingConfig();
config.setPlayBeep(true);//是否播放扫描声音 默认为true
config.setShake(true);//是否震动 默认为true
config.setDecodeBarCode(true);//是否扫描条形码 默认为true
config.setReactColor(R.color.purple_700);//设置扫描框四个角的颜色 默认为白色
config.setFrameLineColor(R.color.white);//设置扫描框边框颜色 默认无色
config.setScanLineColor(R.color.teal_200);//设置扫描线的颜色 默认白色
config.setFullScreenScan(false);//是否全屏扫描 默认为true 设为false则只会在扫描框中扫描
intent.putExtra(Constant.INTENT_ZXING_CONFIG, config);
startActivityForResult(intent, REQUEST_CODE_SCAN);
break;
case R.id.btn_create:
try {
Bitmap logo = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
Bitmap bitmap = CodeCreator.createQRCode("Android开发", 400, 400, null);
mImageView.setImageBitmap(bitmap);
}catch (Exception e) {
e.printStackTrace();
}
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 扫描二维码/条码回传
if (requestCode == REQUEST_CODE_SCAN && resultCode == RESULT_OK) {
if (data != null) {
String content = data.getStringExtra(Constant.CODED_CONTENT);
// result.setText("扫描结果为:" + content);
Toast.makeText(this,content,Toast.LENGTH_SHORT).show();
}
}
}
生成带 logo 的二维码
- 添加 project/build.gradle 依赖:
buildscript {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
dependencies {
classpath "com.android.tools.build:gradle:4.0.0"
classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
- 添加 app/build.gradle 依赖:
implementation 'com.jakewharton:butterknife:10.2.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'
implementation 'com.tbruyelle.rxpermissions2:rxpermissions:+'
implementation'com.journeyapps:zxing-android-embedded:3.0.2@aar'
implementation'com.google.zxing:core:3.2.0'
- 在清单文件中申请权限:
- 工具类 CreatQRCodeImg.java
/**
* Created on 2021/3/30 16:12
*
* @author Gong Youqiang
*/
public class CreatQRCodeImg {
/**
* 生成二维码Bitmap
*
* @param content 内容
* @param widthPix 图片宽度
* @param heightPix 图片高度
* @param logoBm 二维码中心的Logo图标(可以为null)
* @return 生成二维码及保存文件是否成功
*/
public static boolean createQRImage(String content, int widthPix, int heightPix, Bitmap logoBm,String filePath) {
try {
if (content == null || "".equals(content)) {
return false;
}
//配置参数
Map hints = new HashMap();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
//容错级别
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
//设置空白边距的宽度
// hints.put(EncodeHintType.MARGIN, 2); //default is 4
// 图像数据转换,使用了矩阵转换
BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix, heightPix, hints);
int[] pixels = new int[widthPix * heightPix];
// 下面这里按照二维码的算法,逐个生成二维码的图片,
// 两个for循环是图片横列扫描的结果
for (int y = 0; y reqWidth) {
final int heightRatio = Math.round((float) height
/ (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
inSampleSize = heightRatio
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?