扫描二维码和生成二维码
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;
}
}
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;
}
}
相关文章推荐
- 二维码的生成和扫描
- 二维码开发,扫描,生成
- 二维码(扫描,生成)
- 二维码的生成与扫描
- 二维码(生成,扫描,扫描手机相册的,shenLog头像)
- Android平台上二维码的生成与扫描
- 二维码的生成 识别 扫描 封装(Swift)
- Android开发扫描和生成二维码功能
- ionic AngularJS 生成二维码 扫描识别二维码
- Android使用zxing-android-embedded(由zxing开发)实现二维码生成和扫描
- iOS 条形码 二维码 的生成 和 扫描 zBarSDK zXing
- SYBarcodeManager二维码的扫描与生成
- 实现手机扫描二维码页面登录,类似web微信-第二篇,关于二维码的自动生成
- 二维码生成及扫描
- 扫描生成二维码 添加依赖zxing
- C#生成二维码、调用摄像头扫描二维码
- iOS二维码的生成和扫描
- iOS扫描二维码和生成二维码
- Cordova各个插件使用介绍系列(二)—$cordovaBarcodeScanner扫描二维码与生成二维码
- 使用ZXing扫描二维码和生成二维码