二维码名片是现在很常见的,这里只是一个简单生成二维码,如果对二维码名片的内容没有过多的要求,可以借鉴一下。生成二维码用的是谷歌的Zxing库,关于扫码,这里就不多说了。
zxing下载地址:http://download.csdn.net/detail/qq55214/9665820
public class MainActivity extends AppCompatActivity {
private static final int QR_WIDTH = 400;
private static final int QR_HEIGHT = 400;
private ArrayList<String> card = new ArrayList<>();
private ImageView mIv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mIv = (ImageView) findViewById(R.id.main_iv);
card.clear();
card.add("张三");
card.add("18766561626");
card.add("公司_不知道");
card.add("职位_不知道");
card.add("职称_不知道");
card.add("邮箱_不知道");
card.add("地址_不知道");
TextView tv = (TextView) findViewById(R.id.main_tv);
tv.setText(card.toString());
}
/**
*
* @param view
*/
public void qrcode(View view){
mIv.setImageBitmap(createQrcode(enQrCodeOneContact(card)));
}
/**
* 生成二维码
*
* @param qrcode
*/
public Bitmap createQrcode(String qrcode) {
try {
QRCodeWriter writer = new QRCodeWriter();
if (qrcode == null || "".equals(qrcode) || qrcode.length() < 1) {
Toast.makeText(MainActivity.this,"数据为空",Toast.LENGTH_SHORT).show();
return null;
}
// TODO 编码格式
Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
// TODO 二维码宽高、颜色
BitMatrix bitMatrix = writer.encode(qrcode,
BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
for (int y = 0; y < QR_HEIGHT; y++) {
for (int x = 0; x < QR_WIDTH; x++) {
if (bitMatrix.get(x, y)) {
pixels[y * QR_WIDTH + x] = 0xff0000ff;
} else {
pixels[y * QR_WIDTH + x] = 0xffffffff;
}
}
}
Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT,
Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
return bitmap;
} catch (Exception e) {
Log.e("All_Exception", e.toString());
Toast.makeText(MainActivity.this,"数据太大,请重新选择",Toast.LENGTH_SHORT).show();
}
return null;
}
/**
* 组成NameCard名片格式
* @param nameCard
* @return
*/
public String enQrCodeOneContact(ArrayList<String> nameCard){
StringBuilder ss = new StringBuilder();
ss.append(String.format("BEGIN:VCARD\n" +
"VERSION:3.0\n" +
"N:%s",nameCard.get(0)))
.append(String.format("\nTEL;iPhone;VOICE:%s",nameCard.get(1)))
.append("\nORG:" + nameCard.get(2))
.append("\nTITLE:"+nameCard.get(3))
.append("\nROLE:"+nameCard.get(4))
.append("\nEMAIL:"+nameCard.get(5))
.append("\nADR:"+nameCard.get(6))
.append("\nEND:VCARD");
return ss.toString();
}
}
名片是采用公用的VCARD格式,不清楚的童鞋请参考:
http://blog.csdn.net/johnsuna/article/details/8482454
就是把各个字段对应起来,代码里注释也很清楚了。
另外,这个生成二维码字符创长度是有限的,内容不易过多。。。。