Android数字转条形码二维码

项目中有需求将imei号显示成条形码。

直接说重点。

要将数字转换成条形码,用到了谷歌zxing.jar静态库。有兴趣的同学可以自己去了解。

下面直接贴代码:

导入包zxing.jar

如果是AndroidStadio,直接导入静态库。

如果是android.mk,

LOCAL_STATIC_JAVA_LIBRARIES += zxing

(注意也可能是LOCAL_STATIC_JAVA_LIBRARIES :=  zxing)

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := zxing:libs/zxing.jar
include $(BUILD_MULTI_PREBUILT)

import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

 

内容转条形码,最主要就是这个了:

private static final int BLACK = 0xff000000;
private static final int WHITE = 0xFFFFFFFF;
private static BarcodeFormat barcodeFormat= BarcodeFormat.CODE_128;
public  static Bitmap creatBarcode(String contents, int desiredWidth,int desiredHeight) {
    MultiFormatWriter writer = new MultiFormatWriter();
    BitMatrix result=null;
    try {
        result = writer.encode(contents, barcodeFormat, desiredWidth,
                desiredHeight);
    } catch (WriterException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    int width = result.getWidth();
    int height = result.getHeight();
    int[] pixels = new int[width * height];
    // All are 0, or black, by default
    for (int y = 0; y < height; y++) {
        int offset = y * width;
        for (int x = 0; x < width; x++) {
            pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
        }
    }
    Bitmap bitmap = Bitmap.createBitmap(width, height,
            Bitmap.Config.ARGB_8888);
    bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
    return bitmap;
}

 内容转二维码

public Bitmap CreateTwoDCode(String content) throws WriterException {

    // 生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败

    BitMatrix matrix = new MultiFormatWriter().encode(content,

            BarcodeFormat.QR_CODE, 300, 300);

    int width = matrix.getWidth();

    int height = matrix.getHeight();

    // 二维矩阵转为一维像素数组,也就是一直横着排了

    int[] pixels = new int[width * height];

    for(int y = 0; y < height; y++) {

        for(int x = 0; x < width; x++) {

            if(matrix.get(x, y)) {

                pixels[y * width + x] = 0xff000000;

            }

        }

    }


    Bitmap bitmap = Bitmap.createBitmap(width, height,

            Bitmap.Config.ARGB_8888);

    // 通过像素数组生成bitmap,具体参考api

    bitmap.setPixels(pixels, 0, width, 0, 0, width, height);

    return bitmap;

}

显示dialog:

void showDialog(){
    Context context = MainActivity.this;
   Dialog dialog = new Dialog(context);
    List<String> deviceIds = new ArrayList<String>();
    deviceIds.add("111111111111");
    deviceIds.add("222222222222");
    dialog.setContentView(R.layout.my_dialog);
    TextView tv = (TextView)dialog.findViewById(R.id.digits);
    TextView tv1 = (TextView)dialog.findViewById(R.id.digits1);
    ImageView img = (ImageView)dialog.findViewById(R.id.code_img);
    ImageView img1 = (ImageView)dialog.findViewById(R.id.code_img1);
    if(deviceIds.size() == 2){
    String imei1 =deviceIds.get(0);
    String imei2 =deviceIds.get(1);
        View view = View.inflate(context, R.layout.my_dialog, null);
    if(imei1 != null){
        tv.setText(imei1);
    }
    if(imei2 != null) {
        tv1.setText(imei2);
    }
    }
   Bitmap bmp = creatBarcode(tv.getText().toString(),500,120);
    if(bmp != null){
        img.setImageBitmap(bmp);
    }
    Bitmap bmp1 = creatBarcode(tv1.getText().toString(),500,120);
    if(bmp1 != null){
        img1.setImageBitmap(bmp1);
    }

    dialog.show();
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值