您的位置:首页 > 其它

扫描二维码和生成二维码

2017-05-03 18:26 92 查看
compile 'cn.yipianfengye.android:zxing-library:1.8'
public class
MainActivity
extends
AppCompatActivity
implements
View.OnClickListener{

private
ImageView
iv;

@Override
protected
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bu= (Button) findViewById(R.id.dian);
Button erwei= (Button) findViewById(R.id.erweima);
Button zi= (Button) findViewById(R.id.zi);
iv
= (ImageView) findViewById(R.id.pic);
bu.setOnClickListener(new
View.OnClickListener() {
@Override
public
void onClick(View v) {
Intent intent =
new
Intent(MainActivity.this,
CaptureActivity.class);
startActivityForResult(intent,
200);
}
});

erwei.setOnClickListener(this);
zi.setOnClickListener(this);

}

@Override
protected
void onActivityResult(int
requestCode,
int
resultCode, Intent data) {
super.onActivityResult(requestCode,
resultCode, data);
if
(requestCode ==
200) {
//处理扫描结果(在界面上显示)
if
(null
!= data) {
Bundle bundle = data.getExtras();
if
(bundle ==
null) {
return;
}
if
(bundle.getInt(CodeUtils.RESULT_TYPE)
== CodeUtils.RESULT_SUCCESS)
{
String result = bundle.getString(CodeUtils.RESULT_STRING);
Toast.makeText(this,
"解析结果:"
+ result, Toast.LENGTH_LONG).show();
}
else if
(bundle.getInt(CodeUtils.RESULT_TYPE)
== CodeUtils.RESULT_FAILED)
{
Toast.makeText(MainActivity.this,
"解析二维码失败", Toast.LENGTH_LONG).show();
}
}
}
}

@Override
public
void onClick(View v) {
Bitmap bitmap =
null;
switch
(v.getId()){

case
R.id.erweima:
//生成二维码
bitmap
= generateBitmap("http://blog.csdn.net/yanzhenjie1003/article/details/52503533",
400,
400);
iv.setImageBitmap(bitmap);
break;
case
R.id.zi:
//生成自定义的二维码
//先生成二维码
bitmap
= generateBitmap("http://blog.csdn.net/yanzhenjie1003/article/details/52503533",
400,
400);
//添加logo
//先得到一个logo图标
Bitmap
logoBitmap = BitmapFactory.decodeResource(getResources(),
R.mipmap.ic_launcher);
//把logo添加到二维码上
Bitmap
customBitmap = addLogo(bitmap, logoBitmap);
iv.setImageBitmap(customBitmap);
break;
}
}
//生成二维码
private
Bitmap generateBitmap(String content,
int
width,
int
height) {
QRCodeWriter qrCodeWriter =
new
QRCodeWriter();
Map<EncodeHintType, String> hints =
new
HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET,
"utf-8");
try
{
BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE,
width, height);
int[]
pixels = new int[width * height];
for
(int
i =
0; i < height; i++) {
for
(int
j =
0; j < width; j++) {
if
(encode.get(j, i)) {
pixels[i * width + j] =
0x00000000;
}
else
{
pixels[i * width + j] =
0xffffffff;
}
}
}
return
Bitmap.createBitmap(pixels,
0, width, width, height, Bitmap.Config.RGB_565);
}
catch
(WriterException e) {
e.printStackTrace();
}
return
null;
}

/**
* 添加图标
*
*
@param
qrBitmap
*
@param
logoBitmap
*
@return
*/
private
Bitmap addLogo(Bitmap qrBitmap, Bitmap logoBitmap) {
int
qrBitmapWidth = qrBitmap.getWidth();
int
qrBitmapHeight = qrBitmap.getHeight();
int
logoBitmapWidth = logoBitmap.getWidth();
int
logoBitmapHeight = logoBitmap.getHeight();
Bitmap blankBitmap = Bitmap.createBitmap(qrBitmapWidth,
qrBitmapHeight, Bitmap.Config.ARGB_8888);
Canvas canvas =
new
Canvas(blankBitmap);
canvas.drawBitmap(qrBitmap,
0,
0,
null);
canvas.save(Canvas.ALL_SAVE_FLAG);
float
scaleSize =
1.0f;
while
((logoBitmapWidth / scaleSize) > (qrBitmapWidth /
5) || (logoBitmapHeight / scaleSize) > (qrBitmapHeight
/ 5)) {
scaleSize *=
2;
}
float
sx =
1.0f
/ scaleSize;
canvas.scale(sx, sx, qrBitmapWidth /
2, qrBitmapHeight /
2);
canvas.drawBitmap(logoBitmap, (qrBitmapWidth - logoBitmapWidth) /
2, (qrBitmapHeight - logoBitmapHeight) /
2,
null);
canvas.restore();
return
blankBitmap;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: