解决源码
不耽误大家时间,直接上解决代码
依赖:
implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.7'
解决方法
/**
* 参考OneDimensionalCodeWriter源码中对于条码边距的计算
* @param width 条码宽度
* @param contents 条码内容
*/
private int getNewWidth(int width, String contents) {
Code128Writer code128Writer = new Code128Writer();
boolean[] code = code128Writer.encode(contents);
int inputWidth = code.length;
int outputWidth = Math.max(width, inputWidth);
int remain = outputWidth % inputWidth;
return outputWidth - remain;
}
生成条码
Bitmap bitmapBar = QRCodeEncoder.syncEncodeBarcode(contents, getNewWidth(width, contents), height, 0);
imageView.setImageBitmap(bitmapBar);
复制上面那个方法,生成条码的时候重新计算一遍条码宽度,生成出来的条码就不会有两边空白的问题,对于条码的识别没有任何影响,在项目中已得到验证。
如果没有使用bga-qrcode-zxing库生成条码的话,还要增加如下代码
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.MARGIN, 0);
完整方法如下
/**
* 同步创建条形码图片
*
* @param content 要生成条形码包含的内容
* @param width 条形码的宽度,单位px
* @param height 条形码的高度,单位px
* @param textSize 字体大小,单位px,如果等于0则不在底部绘制文字
* @return 返回生成条形的位图
*/
public static Bitmap syncEncodeBarcode(String content, int width, int height, int textSize) {
if</