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;
}
}