背景:
随着移动互联网的普及以及智能终端设备的广泛应用,移动支付变得越来越便捷,通过扫描二维码代替传统的刷卡行为。那么作为开发者而言生成二维码成为了一项必备技能。
准备:
使用zxing包
implementation "com.google.zxing:core:3.3.1"
核心代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
package com.wangpengpro.h5test.utils; import android.graphics.Bitmap; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import java.util.HashMap; import java.util.Map; /** * @author Created by Mr.Wang on 2019/10/10 15:05. * usage: */ public class CodeUtils { /** * 生成条形码(不支持中文) * * @param content * @return */ public static Bitmap createBarcode(String content) { try { BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.CODE_128, 3000 , 700 ); int width = bitMatrix.getWidth(); int height = bitMatrix.getHeight(); int [] pixels = new int [width * height]; for ( int y = 0 ; y < height; y++) { int offset = y * width; for ( int x = 0 ; x < width; x++) { pixels[offset + x] = bitMatrix.get(x, y) ? 0xff000000 : 0xFFFFFFFF ; } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0 , width, 0 , 0 , width, height); return bitmap; } catch (WriterException e) { e.printStackTrace(); } return null ; } /** * 生成二维码 * * @param content * @return */ public static Bitmap createQrcode(String content) { Map<EncodeHintType, Object> hints = new HashMap<>(); // 支持中文配置 hints.put(EncodeHintType.CHARACTER_SET, "UTF-8" ); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); try { BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 1000 , 1000 , hints); int width = bitMatrix.getWidth(); int height = bitMatrix.getHeight(); int [] pixels = new int [width * height]; for ( int y = 0 ; y < height; y++) { int offset = y * width; for ( int x = 0 ; x < width; x++) { pixels[offset + x] = bitMatrix.get(x, y) ? 0xff000000 : 0xFFFFFFFF ; } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0 , width, 0 , 0 , width, height); return bitmap; } catch (WriterException e) { e.printStackTrace(); } return null ; } } |
使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
ImageActivity.java public class ImageActivity extends AppCompatActivity { @RequiresApi (api = Build.VERSION_CODES.JELLY_BEAN) @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_image); ImageView ivBarcode = findViewById(R.id.iv_barcode); ImageView ivQrcode = findViewById(R.id.iv_qrcode); ivBarcode.setImageBitmap(CodeUtils.createBarcode( "This is a barcode" )); ivQrcode.setImageBitmap(CodeUtils.createQrcode( "This is a qrcode" )); } } |
activity_image.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?xml version= "1.0" encoding= "utf-8" ?> <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/tools" android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" tools:context= ".ImageActivity" > <ImageView android:id= "@+id/iv_barcode" android:layout_width= "wrap_content" android:layout_height= "wrap_content" /> <ImageView android:id= "@+id/iv_qrcode" android:layout_width= "wrap_content" android:layout_height= "wrap_content" /> </LinearLayout> |
运行效果:
总结
以上所述是小编给大家介绍的Android生成条形码和二维码功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
原文链接:https://blog.csdn.net/zgjswp/article/details/102485203