博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android使用ZXing生成带图片的二维码
阅读量:6588 次
发布时间:2019-06-24

本文共 3535 字,大约阅读时间需要 11 分钟。

效果图如下:

制作过程很简单的就是在原始的二维码图片上添加一个logn图标,代码的注释写得很详细,也就不给大家啰嗦了

package com.example.day44_02_qrcodewithlogin;import java.util.HashMap;import java.util.Map;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.os.Bundle;import android.view.Menu;import android.widget.ImageView;import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.WriterException;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.QRCodeWriter;public class MainActivity extends Activity {    private ImageView imageView_main ;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		initView();	}	private void initView() {		imageView_main = (ImageView) findViewById(R.id.imageView_main);		String content = "我们要毕业了";		createQRCode(content,500,500);	}    	/**	 * 用于创建一个二维码	 * @param content	 * @param width	 * @param height	 */	private void createQRCode(String content, int width, int height) {				try {			//1,创建实例化对象			QRCodeWriter writer = new QRCodeWriter() ;			//2,设置字符集			Map
map = new HashMap
(); map.put(EncodeHintType.CHARACTER_SET, "UTF-8"); //3,通过encode方法将内容写入矩阵对象 BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height,map); //4,定义一个二维码像素点的数组,向每个像素点中填充颜色 int[] pixels = new int[width*height]; //5,往每一像素点中填充颜色(像素没数据则用黑色填充,没有则用彩色填充,不过一般用白色) for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (matrix.get(j, i)) { pixels[i*width+j] = 0xff000000; }else { pixels[i*width+j] = 0xffffffff; } } } //6,创建一个指定高度和宽度的空白bitmap对象 Bitmap bm_QR = Bitmap.createBitmap(width, height, Config.ARGB_8888); //7,将每个像素的颜色填充到bitmap对象 bm_QR.setPixels(pixels, 0, width, 0, 0, width, height); //8,创建一个bitmap对象用于作为其图标 Bitmap bm_login = BitmapFactory.decodeResource(getResources(), R.drawable.img_kf_qq); //9,创建一个方法在二维码上添加一张图片 if (addLogin(bm_QR,bm_login) != null) { imageView_main.setImageBitmap(addLogin(bm_QR,bm_login)); } } catch (WriterException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 用于向创建的二维码中添加一个logn * @param bm_QR * @param bm_login * @return */ private Bitmap addLogin(Bitmap bm_QR, Bitmap bm_login) { if (bm_QR == null) { return null; } if (bm_login == null) { return bm_QR ; } //获取图片的宽高 int bm_QR_Width = bm_QR.getWidth() ; int bm_QR_Height = bm_QR.getHeight(); int bm_login_Width = bm_login.getWidth() ; int bm_login_Height = bm_login.getHeight(); //设置logn的大小为二维码整体大小的1/5 float scale_login = bm_QR_Width*1.0f /5/bm_login_Width ; Bitmap bitmap = Bitmap.createBitmap(bm_QR_Width, bm_QR_Height, Bitmap.Config.ARGB_8888); try { Canvas canvas = new Canvas(bitmap); canvas.drawBitmap(bm_QR, 0, 0, null); canvas.scale(scale_login, scale_login, bm_QR_Width / 2, bm_QR_Height / 2); canvas.drawBitmap(bm_login, (bm_QR_Width - bm_login_Width) / 2, (bm_QR_Height - bm_login_Height) / 2, null); canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore(); } catch (Exception e) { bitmap = null; e.getStackTrace(); } return bitmap; } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; }}

  

转载地址:http://ufhno.baihongyu.com/

你可能感兴趣的文章
keepalived双机热备原理及实例部署LVS+keepalived
查看>>
Ubuntu安装配置JDK、Tomcat、SVN服务器
查看>>
possible SYN flooding on port 3690 Sending cookies
查看>>
Sql Server 2014 双节点群集无法切到其中一节点解决
查看>>
wxWidgets第十七课 采用AGG渲染库
查看>>
Linux Bash严重漏洞修复紧急通知
查看>>
恶意登录ip添加到防火墙
查看>>
微软职位内部推荐-Software Engineer II_VS
查看>>
初次安装Mysql5.7以上版本后初始root密码找不到的问题
查看>>
Docker网络解决方案-Weave部署记录
查看>>
python之抽象一
查看>>
【总结】Apache Sentry 服务简介
查看>>
计算机网络网络层重要概念
查看>>
OSPF路由表
查看>>
CentOS 系统sudo命令配置
查看>>
react在jsx语法中实现for循环
查看>>
第一讲 linux简介
查看>>
mysql快速部署主从复制
查看>>
Linux目录树
查看>>
linux系统管理常用命令--top
查看>>