android中生成动态二维码很简单,网上随便搜一搜便能找到,本以为任务很快就把任务解决了,可是客户说二维码中一定要添加他们公司的logo这可把哥们难倒了,开始再次投入度娘的怀抱,查看各位大神的代码,demo是有,但需要积分,可哥们是一个刚加入博客的新成员,那有什么积分,没办法只有向同事借用他的账号下载相关demo,很庆幸的是真的有相关问题,而且解决了,感谢论坛中的各位大神
在此问题中遇到两个问题:
1.生成动态二维码
2.在二维码中添加logo
在点击事件中写createImage();方法,erweima为ImageView类型,生成的二维码存放的地方
private void createImage() {
try {
QRCodeWriter writer = new QRCodeWriter();
String num=SPUtils.getStringPreference(
AboutUsActivity.this, "user", "userName", "");
String str="我爱你二维码"+num;
BitMatrix martix = writer.encode(str, BarcodeFormat.QR_CODE,
QR_WIDTH, QR_HEIGHT);
Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
BitMatrix bitMatrix = new QRCodeWriter().encode(str,
BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
Bitmap[] bitmaps=new Bitmap[2];
bitmaps[1]=BitmapFactory.decodeResource(getResources(), R.drawable.cmlogo_s);//logo图标
imageW=bitmaps[1].getWidth();
imageH=bitmaps[1].getHeight();
int startW=QR_WIDTH/2-imageW/2;
int starH=QR_HEIGHT/2-imageH/2;
for (int y = 0; y < QR_HEIGHT; y++) {
for (int x = 0; x < QR_WIDTH; x++) {
if ((x<=startW||x>=starH+imageW)||(y<=starH||y>=+imageH)) {
if (bitMatrix.get(x, y)) {
pixels[y * QR_WIDTH + x] = 0xff000000;
}
} else {
}
}
}
Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT,
Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
bitmaps[0]=bitmap;
erweima.setImageBitmap(combineBitmaps(bitmaps, startW,starH));
// qr_image.setImageBitmap(bitmap);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Bitmap combineBitmaps(Bitmap[] bitmaps,int w,int h) {//添加logo
Bitmap newBitmap = Bitmap.createBitmap(bitmaps[0].getWidth(),
bitmaps[0].getHeight(), Config.ARGB_8888);
Canvas cv = new Canvas(newBitmap);
for (int i = 0; i < bitmaps.length; i++) {
if (i == 0) {
cv.drawBitmap(bitmaps[0], 0, 0, null);
} else {
cv.drawBitmap(bitmaps[i], w, h, null);
}
cv.save(Canvas.ALL_SAVE_FLAG);
cv.restore();
}
return newBitmap;
}