参考:zxing设置条码两边空白(EncodeHintType.MARGIN)无效的分析
阅读上方源码解析后得到思路:
白边的大小: int leftPadding = (outputWidth - (inputWidth * multiple)) / 2;
要让leftpadding为0,需要让传入的width和code.length是整数倍的关系,
那么传入expectWidth和maxWidth,计算得到一个没有白边的宽度. 用这个宽度去生成条形码,一定没有白边
高度不影响白边生成,随意传入.
封装后的代码:
/** @param context 尽量用activity,以防使用过屏幕适配工具类后application context 和activity里的desplaymetric里的dpidensity不一致
@param expectWidth 期望的宽度
@param maxWidth 最大允许宽度
* @param contents 生成条形码的内容
* @param height
* @return
*/
public static Bitmap getBarCodeWithoutPadding(Context context, int expectWidth,int maxWidth,int height,String contents){
int width = CommonUtils.dp2px(context, expectWidth);
int widthMax = CommonUtils.dp2px(context, maxWidth);
int heightExpect = CommonUtils.dp2px(context, height);
int realWidth = getBarCodeNoPaddingWidth(width,contents,widthMax);
return syncEncodeBarcode(contents, realWidth, heightExpect,0);
}
计算生成无白边的宽度:
private static int getBarCodeNoPaddingWidth(