付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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年职业指导师就业服务试题含答案
- 保山云南保山施甸县消防救援局政府专职消防员招聘笔试历年备考题库附带答案详解
- 亳州2025年安徽蒙城县事业单位公开招聘26人笔试历年典型考点题库附带答案详解
- 云南省2025云南省卫生健康委所属和联系单位招聘222人笔试历年参考题库典型考点附带答案详解(3卷合一)
- 云南2025年云南中医药大学招聘硕士以上人员2人笔试历年备考题库附带答案详解
- 财务中层副职年终总结(3篇)
- 临海市2025年浙江临海市文化和广电旅游体育局及下属参公事业单位选调2人笔试历年参考题库典型考点附带答案详解(3卷合一)
- 中央2025年农业农村部规划设计研究院招聘事业编制工作人员笔试历年常考点试题专练附带答案详解
- 上海2025年上海市数字城市规划研究中心事业单位招聘笔试历年典型考点题库附带答案详解
- 2025重庆涪陵“才聚涪州·引雁回巢”引才专项招聘410人(第一批)笔试参考题库附带答案详解
- 骨科质控中心工作要求及专科建议
- 县域慢病管理中心建设项目
- 北师大版八年级上册数学期末考试试卷及答案
- 硫酸转化10kta氯化铵生产硫酸铵中试装置建设项目可行性研究报告
- 水平螺旋输送机设计计算及参数表
- 2024版国开电大法律事务专科《民法学2》期末考试总题库
- 某排涝泵站工程初步设计报告
- 人教版六年级第一学期数学期末考试试题(含答案)
- 企业上市对人力资源管理的要求及目前人力资源部现状分析
- 整流电路教案
- 大桥防腐涂装工艺试验评定实施方案
评论
0/150
提交评论