Andoid开发中生成二维码

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

第一步:

        确定我们二维码的位置,即是在我们应用的哪个页面的哪个位置,简单讲就是用一个ImageView把二维码展示出来,我们就把二维码展示在下面布局activity_main.xml中的ImageView上:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayout android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal"android:gravity="center_horizontal"><ImageViewandroid:id="@+id/imag"android:layout_width="100dp"android:layout_height="100dp"android:scaleType="fitXY"android:src="@drawable/ic_launcher"android:layout_gravity="center"></ImageView></LinearLayout></LinearLayout>

第二步:定义一个生成二维码的工具类:QRUtils.java  (注意:定义之前不要忘记在项目中要导入ZXing相关的jar包)

core.jar这个包  jar包下载地址  最近使用

182940_X15q_2407682.jpg

package com.utils;import java.util.EnumMap;
import java.util.Map;import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.text.TextUtils;import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;public class QRUtils {private static final int WHITE = 0xFFFFFFFF;private static final int BLACK = 0xFF000000;/*** 将字符串按照指定大小生成二维码图片*/public static Bitmap encodeToQR(String contentsToEncode, int dimension)throws Exception {if (TextUtils.isEmpty(contentsToEncode))return null;BarcodeFormat format = BarcodeFormat.QR_CODE;Map hints = new EnumMap(EncodeHintType.class);hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");BitMatrix result = new MultiFormatWriter().encode(contentsToEncode,format, dimension, dimension, hints);int width = result.getWidth();int height = result.getHeight();int[] pixels = new int[width * height];for (int y = 0; y < height; y++) {int offset = y * width;for (int x = 0; x < width; x++) {pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;}}Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);bitmap.setPixels(pixels, 0, width, 0, 0, width, height);return bitmap;}public static Bitmap encodeToQRWidth(String contentsToEncode, int dimension)throws Exception {if (TextUtils.isEmpty(contentsToEncode))return null;BarcodeFormat format = BarcodeFormat.QR_CODE;@SuppressWarnings("unchecked")Map hints = new EnumMap(EncodeHintType.class);hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");BitMatrix result = new MultiFormatWriter().encode(contentsToEncode,format, dimension, dimension, hints);int width = result.getWidth();int height = result.getHeight();boolean isFirstBlack = true;int startX = 0;int startY = 0;int[] pixels = new int[width * height];for (int y = 0; y < height; y++) {int offset = y * width;for (int x = 0; x < width; x++) {pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;if (result.get(x, y) && isFirstBlack) {isFirstBlack = false;startX = x;startY = y;}}}Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);bitmap.setPixels(pixels, 0, width, 0, 0, width, height);Matrix m = new Matrix();float sx = (width + 2f * startX) / width;float sy = (height + 2f * startY) / height;m.postScale(sx, sy);Bitmap qrBitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(qrBitmap);canvas.translate(-startX, -startY);Paint paint = new Paint();paint.setAntiAlias(true);canvas.drawBitmap(bitmap, m, paint);canvas.save();return qrBitmap;}}

第三步:在我们既我们的主Activity:MainActivity.java

package com.action;import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;
import com.utils.*;public class MainActivity extends Activity {private ImageView imag;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initViews();}protected void initViews() {imag = (ImageView) findViewById(R.id.imag);DisplayMetrics outMetrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(outMetrics);int w = outMetrics.widthPixels * 8 / 11;// 设置宽度ViewGroup.LayoutParams layoutParams = imag.getLayoutParams();layoutParams.height = layoutParams.width = w;// 设置高度imag.setLayoutParams(layoutParams);try {Bitmap bitmap = QRUtils.encodeToQRWidth("http://write.blog.csdn.net/", w);// 要生成二维码的内容,我这就是一个网址imag.setImageBitmap(bitmap);} catch (Exception e) {e.printStackTrace();Toast.makeText(this, "生成二维码失败", Toast.LENGTH_SHORT);}}}

三步完成我们的二维码生成,是不是很简单!!

转载于:https://my.oschina.net/symahll/blog/482474

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android中的onActivityResult和setResult方法的使用

$*********************************************************************************************$博主推荐&#xff1a;风萧兮兮易水寒&#xff0c;“天真”一去兮不复还。如何找到天真的那份快乐。小编倾力推荐app: 天真无谐下载方式&#xff1a;豌豆荚&#xff0c;应用宝…

单文件快速体验使用react输出hello_world

看了下react官方的hello world教程, 感觉对新手很不友好.codepen虽然好用, 但是封装太多东西, 看起来 太抽象. 还是喜欢像学习jQuery那样, 直接在单文件中引入必要的js文件, 然后直接运行的那种感觉. 如果使用VS Code, 建议安装Sublime Babel, 来提供对react语法的代码高亮. 基…

linux用户及权限操作

用户和用户组 说明&#xff1a;在Linux中只有超级管理员权限才能对用户和用户组进行设置&#xff0c;其他的用户一律没有权限设置&#xff1a; 用户管理 语法&#xff1a;#useradd 用户名 添加一个新用户 注&#xff1…

python flask Blueprint搭建

随着功能的添加&#xff0c;路由越来越多&#xff0c;view层的拆分变成了刚需 蓝图的杀手锏是将你的应用组织成不同的组件&#xff0c;比如把这里的admin&#xff0c;main&#xff0c;course等相关的视图方法分为组件。这时我们可以 创建三个蓝图实现这两个独立的组件。static文…

第6章 服务模式 Service Interface(服务接口)

Service Interface&#xff08;服务接口&#xff09;上下文您正在设计企业应用程序&#xff0c;并且需要能够通过网络使用其部分功能。此功能需要能够被各类系统使用&#xff0c;因此互操作性是设计的重要方面。除互操作性之外&#xff0c;可能还需要支持不同的通信协议&#x…

dialog像父activity传递参数

启动新activity有两种方式&#xff1a; startActivityForResult(Intent, int); startActivity(Intent, Bundle); 新开启的dialog像父activity传递参数用第一种方法。 startActivityForResult(Intent, int) intent&#xff1a;要传递的值 int&#xff1a;给新开启的dialog打标签…

linux目录规范及简单说明

Linux系统目录结构以及简单说明 linux目录图&#xff1a; / root --- 启动Linux时使用的一些核心文件。如操作系统内核、引导程序Grub等。home --- 存储普通用户的个人文件 ftp --- 用户所有服务httpdsambauser1user2 bin --- 系统启动时需要的执行文件&#xff08;二进制&…

Flask中的session操作

https://www.cnblogs.com/notzy/p/9187304.html 一、配置SECRET_KEY 因为flask的session是通过加密之后放到了cookie中。所以有加密就有密钥用于解密&#xff0c;所以&#xff0c;只要用到了flask的session模块就一定要配置“SECRET_KEY”这个全局宏。一般设置为24位的字符。…

逆向Android软件的步骤

2019独角兽企业重金招聘Python工程师标准>>> 逆向Android软件的步骤&#xff1a; 首先使用反编译的工具对反编译&#xff0c;然后阅读反汇编代码&#xff0c;如果有必要还会对其进行动态调试&#xff0c;找到突破口后注入或直接修改反汇编代码&#xff0c;最后重新编…

CRT 重启Was

输入用户名、密码登陆以后 # ps -eaf | grep websphere 找到路径 /usr/IBM/WebSphere/AppServer/ 进入/usr/IBM/WebSphere/AppServer/bin 运行 stopServer.sh server1 其中server1为服务器实例名 需要输入登陆was控制台的用户名、密码 运行 startServer.sh server1 即完成服务器…

JAVA中跨平台分隔符

在Windows下的路径分隔符和Linux下的路径分隔符是不一样的&#xff0c;当直接使用绝对路径时&#xff0c;跨平台会暴出“No such file or diretory”的异常。 比如说要在temp目录下建立一个test.txt文件&#xff0c;在Windows下应该这么写&#xff1a;File file1 new File (&q…

Flask Sessions会话

与Cookie不同&#xff0c;会话数据存储在服务器上。会话是客户端登录到服务器并注销的时间间隔。需要在此会话中进行的数据存储在服务器上的临时目录中。 与每个客户端的会话分配一个会话ID。会话数据存储在cookie顶部&#xff0c;服务器以加密方式签名。对于这种加密&#xf…

linux rsync 远程同步

rsync(Remote Sync) 是一个Unix/linux系统下的文件同步和传输工具。Rsync通过“rsync算法”提供了一个客户机和远程文件服务器的文件同步的快速方法。工作机制&#xff1a; 在远程同步任务中&#xff0c;负责发起rsync同步操作的客户机称为发起端&#xff0c;而负责响应来自客…

GUI 快捷键的实现思路

思路: 前提快捷键操作不可重复,即一个快捷键对应一个控件的动作一个窗体保持一份快捷键的map映射在相应的消息中获取快捷键列表如键盘消息在控件类对象中定义一个默认的响应行为,比如Button按了Enter键当子控件隐藏,父控件关系发生变化时则重新设置快捷键转载于:https://www.cn…

hadoop中unhealthynodes的问题解决

在yarn-site.xml中加入如下配置 <property> <name>yarn.nodemanager.disk-health-checker.min-healthy-disks</name> <value>0.0</value> </property> <property><name>yarn.nodemanager.disk-health-checker.max-d…

javascript权威指南——笔记(第十章:正则)

正则表达式是描述字符模式的对象 为什么使用正则&#xff1a; 1.找数字 1 var str "12 f13kjm54n43 43k";2 var arr [];3 4 for(var i 0, len str.length; i<len; i){5 6 var char str.charAt(i);7 8 if(char > "0"…

解決 centos -bash: vim: command not found

i. 那么如何安裝 vim 呢? 输入rpm -qa|grep vim 命令, 如果 vim 已经正确安裝,会返回下面的三行代码: rootserver1 [~]# rpm -qa|grep vim vim-enhanced-7.0.109-7.el5 vim-minimal-7.0.109-7.el5 vim-common-7.0.109-7.el5 如果少了其中的某一条,比如 vim-enhanced 的,就…

mysql日期和时间类型

mysql日期和时间类型 mysql有5种表示时间值的日期和时间类型&#xff0c;分别为、DATE&#xff0c;TIME&#xff0c;YEAR&#xff0c;DATETIME&#xff0c;TIMESTAMP。 TIMESTAMP类型有专有的自动更新特性&#xff0c; TIMESTAMP类型有专有的自动更新特性&#xff0c; TIME…

Python程序每日一练习

问题一&#xff1a;做为Apple Store App独立开发者&#xff0c;你要搞限时促销&#xff0c;为你的应用生成激活码&#xff08;或者优惠券&#xff09;&#xff0c;使用Python如何生成200个激活码&#xff08;或者优惠券&#xff09;&#xff1f; 简介&#xff1a;通用唯一识别码…

C/C++查找一定范围内的素数(筛法)

本文转自于&#xff1a;http://dalu.blogbus.com/logs/37977984.html 由于一个合数总是可以分解成若干个质数的乘积&#xff0c;那么如果把质数&#xff08;最初只知道2是质数&#xff09;的倍数都去掉&#xff0c;那么剩下的就是质数了。例如要查找100以内的质数&#xff0c;首…