付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么实现点击生成二维码功能
这期内容当中在下将会给大家带来有关Android中怎么实现点击生成二维码功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。QRCodeUtil:package
com.example.administrator.zxing;
import
android.graphics.Bitmap;
import
android.graphics.Canvas;
import
com.google.zxing.BarcodeFormat;
import
com.google.zxing.EncodeHintType;
import
com.google.zxing.WriterException;
import
mon.BitMatrix;
import
com.google.zxing.qrcode.QRCodeWriter;
import
com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.util.HashMap;
import
java.util.Map;
public
class
QRCodeUtil
{
public
static
boolean
createQRImage(String
content,
int
widthPix,
int
heightPix,
Bitmap
logoBm,
String
filePath)
{
try
{
if
(content
==
null
||
"".equals(content))
{
return
false;
}
//配置参数
Map<EncodeHintType,
Object>
hints
=
new
HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET,
"utf-8");
//容错级别
hints.put(EncodeHintType.ERROR_CORRECTION,
ErrorCorrectionLevel.H);
//设置空白边距的宽度
//
hints.put(EncodeHintType.MARGIN,
2);
//default
is
4
//
图像数据转换,使用了矩阵转换
BitMatrix
bitMatrix
=
new
QRCodeWriter().encode(content,
BarcodeFormat.QR_CODE,
widthPix,
heightPix,
hints);
int[]
pixels
=
new
int[widthPix
*
heightPix];
//
下面这里按照二维码的算法,逐个生成二维码的图片,
//
两个for循环是图片横列扫描的结果
for
(int
y
=
0;
y
<
heightPix;
y++)
{
for
(int
x
=
0;
x
<
widthPix;
x++)
{
if
(bitMatrix.get(x,
y))
{
pixels[y
*
widthPix
+
x]
=
0xff000000;
}
else
{
pixels[y
*
widthPix
+
x]
=
0xffffffff;
}
}
}
//
生成二维码图片的格式,使用ARGB_8888
Bitmap
bitmap
=
Bitmap.createBitmap(widthPix,
heightPix,
Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels,
0,
widthPix,
0,
0,
widthPix,
heightPix);
if
(logoBm
!=
null)
{
bitmap
=
addLogo(bitmap,
logoBm);
}
//必须使用compress方法将bitmap保存到文件中再进行读取。直接返回的bitmap是没有任何压缩的,内存消耗巨大!
return
bitmap
!=
null
&&
press(Bitmap.CompressFormat.JPEG,
100,
new
FileOutputStream(filePath));
}
catch
(WriterException
|
IOException
e)
{
e.printStackTrace();
}
return
false;
}
/**
*
在二维码中间添加Logo图案
*/
private
static
Bitmap
addLogo(Bitmap
src,
Bitmap
logo)
{
if
(src
==
null)
{
return
null;
}
if
(logo
==
null)
{
return
src;
}
//获取图片的宽高
int
srcWidth
=
src.getWidth();
int
srcHeight
=
src.getHeight();
int
logoWidth
=
logo.getWidth();
int
logoHeight
=
logo.getHeight();
if
(srcWidth
==
0
||
srcHeight
==
0)
{
return
null;
}
if
(logoWidth
==
0
||
logoHeight
==
0)
{
return
src;
}
//logo大小为二维码整体大小的1/5
float
scaleFactor
=
srcWidth
*
1.0f
/
5
/
logoWidth;
Bitmap
bitmap
=
Bitmap.createBitmap(srcWidth,
srcHeight,
Bitmap.Config.ARGB_8888);
try
{
Canvas
canvas
=
new
Canvas(bitmap);
canvas.drawBitmap(src,
0,
0,
null);
canvas.scale(scaleFactor,
scaleFactor,
srcWidth
/
2,
srcHeight
/
2);
canvas.drawBitmap(logo,
(srcWidth
-
logoWidth)
/
2,
(srcHeight
-
logoHeight)
/
2,
null);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
}
catch
(Exception
e)
{
bitmap
=
null;
e.getStackTrace();
}
return
bitmap;
}
}MainActivity:package
com.example.administrator.zxing;
import
android.content.Context;
import
android.graphics.BitmapFactory;
import
android.os.Bundle;
import
android.os.Environment;
import
android.support.v7.app.AppCompatActivity;
import
android.view.View;
import
android.widget.Button;
import
android.widget.CheckBox;
import
android.widget.EditText;
import
android.widget.ImageView;
import
java.io.File;
public
class
MainActivity
extends
AppCompatActivity
{
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//内容
final
EditText
contentET
=
(EditText)
findViewById(R.id.create_qr_content);
//显示二维码图片
final
ImageView
imageView
=
(ImageView)
findViewById(R.id.create_qr_iv);
//是否添加Logo
final
CheckBox
addLogoCB
=
(CheckBox)
findViewById(R.id.create_qr_addLogo);
Button
createQrBtn
=
(Button)
findViewById(R.id.create_qr_btn);
createQrBtn.setOnClickListener(new
View.OnClickListener()
{
@Override
public
void
onClick(View
v)
{
final
String
filePath
=
getFileRoot(MainActivity.this)
+
File.separator
+
"qr_"
+
System.currentTimeMillis()
+
".jpg";
//二维码图片较大时,生成图片、保存文件的时间可能较长,因此放在新线程中
new
Thread(new
Runnable()
{
@Override
public
void
run()
{
boolean
success
=
QRCodeUtil.createQRImage(contentET.getText().toString().trim(),
800,
800,
addLogoCB.isChecked()
?
BitmapFactory.decodeResource(getResources(),
R.mipmap.qr_logo)
:
null,
filePath);
if
(success)
{
runOnUiThread(new
Runnable()
{
@Override
public
void
run()
{
imageView.setImageBitmap(BitmapFactory.decodeFile(filePath));
}
});
}
}
}).start();
}
});
}
//文件存储根目录
private
String
getFileRoot(Context
context)
{
if
(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
File
external
=
context.getExternalFilesDir(null);
if
(external
!=
null)
{
return
external.getAbsolutePath();
}
}
return
context.getFilesDir().getAbsolutePath();
}
}布局:
activity_main:<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.administrator.zxing.MainActivity">
<EditText
android:id="@+id/create_qr_content"
android:layout_width="match_parent"
android:layout_he
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乒乓球桌台面弹性均匀检验报告
- 2026数学核心素养落实同步课件
- 高三冲刺数学圆锥曲线综合精讲|联立方程 韦达定理
- 第七章-具身智能机器人灭火场景全流程实物实验
- 2026北京海淀区初三二模英语试题及答案
- 建筑起重机械安装拆卸安全技术措施
- 建筑工程模板支撑方案
- 2026四川宜宾汇发产业新空间投资有限公司第一批第二次招聘3人模拟试卷附参考答案详解【培优B卷】
- 建筑防腐幕墙保温施工方案
- 2026年温州市教育局直属公办学校面向社会公开招聘教师和工作人员14人模拟试卷及参考答案详解【巩固】
- 装配式二次结构施工方案
- 房地产售后服务及维修保障措施
- 【高分复习笔记】东南大学等四校合编《土力学》(第3版)笔记和课后习题(含考研真题)详解
- 《地方国有企业中层管理者绩效考核体系研究》
- 长沙理工大学城南学院《光纤通信原理》2022-2023学年第一学期期末试卷
- 手术室外来器械使用管理
- 2024年无人机测绘操控员(高级)技能鉴定理论考试题库资料(含答案)
- DL∕T 2010-2019 高压无功补偿装置继电保护配置及整定技术规范
- 青岛版五年级下册分数的加减法练习200题及答案
- 房屋居住权合同
- 《电路分析基础》网孔分析法
评论
0/150
提交评论