项目中有需求将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();
}
本文介绍如何使用谷歌zxing库将IMEI号转换为条形码和二维码,包括代码实现和在Android环境下的集成步骤。
156

被折叠的 条评论
为什么被折叠?



