项目中有需求将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(); }