Android二维码之创建

  由于微信的推出二维码走进了我们的生活,并且越来越多的人们正在发挥着自己的想象力去使用它,来方便我们的生活,我曾经听说过一个笑话,当我们死后,墓碑上不再有墓志铭,而会出现一个记录你一生信息的二维码,当人们走到你们的墓碑前,掏出手机扫一扫就可以看到你一生的丰功伟绩。这是不是很有意思,我都认这会在不久的将来成为现实,哈哈,玩笑说完了,下面我们来一起学习一下如何在Android开发中让二维码为我们服务。

  本篇我将会带领朋友们实现一个记录个人基本信息的二维码设计思路,对于搞过算法的大牛们,这里要让你们失望了,对于二维码生成的算法,本人才疏学浅尚且无法为大家分享,本篇事例的实现我们将借助core.jar实现,对于这个jar包的下载,我为大家提供一个链接,方便大家学习使用:http://pan.baidu.com/s/1bnGZoF9

  准备好我们的jar包后,我们开始今天的设计,第一步:创建工程,导入jar包

  在我们的集成开发环境中,创建一个Android工程项目,为我们今天事例的设计做铺垫。创建好工程后,将我们刚刚下载好的jar包导入到我们的工程中,Ctrl+c我们的jar包,在我们的工程目录下找到libs文件夹Ctrl+v,然后呢?就是通过集成开发环境将我们的jar包导入到工程。

  

  第二步:创建我们的布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"android:id="@+id/ll"><!-- 用于展示我们创建的二维码 --><ImageViewandroid:id="@+id/imgCode"android:layout_width="100dip"android:layout_height="100dip"android:layout_gravity="center_horizontal" /><!-- 公司 --><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="公司" /><EditTextandroid:id="@+id/etCompany"android:layout_width="fill_parent"android:layout_height="wrap_content"android:hint="选填" /></LinearLayout><!-- 电话 --><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="电话" /><EditTextandroid:id="@+id/etPhone"android:layout_width="fill_parent"android:layout_height="wrap_content"android:hint="选填" /></LinearLayout><!-- 邮箱 --><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="邮箱" /><EditTextandroid:id="@+id/etEmail"android:layout_width="fill_parent"android:layout_height="wrap_content"android:hint="选填" /></LinearLayout><!-- 网址 --><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="网址" /><EditTextandroid:id="@+id/etWeb"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="http://" /></LinearLayout><Button  android:id="@+id/but" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="生成二维码"/></LinearLayout></RelativeLayout>

  第三步:编辑我们Activity:

public class MainActivity extends Activity {private EditText etCompany;private EditText etPhone;private EditText etEmail;private EditText etWeb;private Bitmap logo;private static final int IMAGE_HALFWIDTH = 40;//宽度值,影响中间图片大小
    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获得资源图片,可改成获取本地图片或拍照获取图片logo=BitmapFactory.decodeResource(super.getResources(), R.drawable.ic_launcher);etCompany =(EditText) findViewById(R.id.etCompany);etPhone=(EditText) findViewById(R.id.etPhone);etEmail =(EditText) findViewById(R.id.etEmail);etWeb =(EditText) findViewById(R.id.etWeb); findViewById(R.id.but).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String company=etCompany.getText().toString().trim() ;String phone =etPhone .getText().toString().trim() ; String email = etEmail.getText().toString().trim() ;String web = etWeb.getText().toString().trim() ; //二维码中包含的文本信息String contents= "BEGIN:VCARD\nVERSION:3.0\nORG:"+company+"\nTEL:"+phone+"\nURL:"+web+"\nEMAIL:"+email+"\nEND:VCARD";try {//调用方法createCode生成二维码Bitmap bm=createCode(contents, logo, BarcodeFormat.QR_CODE);ImageView img=(ImageView)findViewById(R.id.imgCode) ;//将二维码在界面中显示
                img.setImageBitmap(bm);} catch (WriterException e) {e.printStackTrace();} }});}/*** 生成二维码* @param string 二维码中包含的文本信息* @param mBitmap logo图片* @param format  编码格式* @return Bitmap 位图* @throws WriterException*/public Bitmap createCode(String string,Bitmap mBitmap, BarcodeFormat format)throws WriterException {Matrix m = new Matrix();float sx = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getWidth();float sy = (float) 2 * IMAGE_HALFWIDTH/ mBitmap.getHeight();m.setScale(sx, sy);//设置缩放信息//将logo图片按martix设置的信息缩放mBitmap = Bitmap.createBitmap(mBitmap, 0, 0,mBitmap.getWidth(), mBitmap.getHeight(), m, false);MultiFormatWriter writer = new MultiFormatWriter();//
        Hashtable<EncodeHintType, String> hst = new Hashtable<EncodeHintType, String>();hst.put(EncodeHintType.CHARACTER_SET, "UTF-8");//设置字符编码BitMatrix matrix = writer.encode(string, format, 400, 400, hst);//生成二维码矩阵信息int width = matrix.getWidth();//矩阵高度int height = matrix.getHeight();//矩阵宽度int halfW = width / 2;int halfH = height / 2;int[] pixels = new int[width * height];//定义数组长度为矩阵高度*矩阵宽度,用于记录矩阵中像素信息for (int y = 0; y < height; y++) {//从行开始迭代矩阵for (int x = 0; x < width; x++) {//迭代列if (x > halfW - IMAGE_HALFWIDTH && x < halfW + IMAGE_HALFWIDTH&& y > halfH - IMAGE_HALFWIDTH&& y < halfH + IMAGE_HALFWIDTH) {//次处位置用于存放图片信息pixels[y * width + x] = mBitmap.getPixel(x - halfW+ IMAGE_HALFWIDTH, y - halfH + IMAGE_HALFWIDTH);//记录图片每个像素信息} else {if (matrix.get(x, y)) {//如果有黑块点,记录信息pixels[y * width + x] = 0xff000000;//记录黑块信息
                    }}}}Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);// 通过像素数组生成bitmapbitmap.setPixels(pixels, 0, width, 0, 0, width, height);return bitmap;}}

  上面的代码注释已经非常详细,这里我再简单说几句,这部分代码分为上下两部分,上部分都是我们经常使用的,下部分则是我们二维码创建的重点。ok到这里我们的效果就实现了,最后上一张效果图:

  

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

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

相关文章

如何开展软件架构之概念架构

如何开展软件架构之概念架构 到目前为止&#xff0c;我们已经完成了需求的分析过程&#xff0c;总结来说&#xff0c;主要的步聚是 一&#xff09;需求结构化&#xff0c; 二&#xff09;分析约束影响 三&#xff09;重点关注质量需求。 那么接下来的阶段则是系统的概念架构了&…

【51单片机快速入门指南】6.1:LCD1602的八线、四线控制及自定义符号,完美兼容Proteus仿真

目录硬知识显示特性接口定义操作时序写操作时序读操作时序寄存器忙标志位BF地址计数器&#xff08;AC&#xff09;显示数据寄存器&#xff08;DDRAM&#xff09;CGROMCGRAM指令清屏指令光标归位指令进入模式设置指令显示开关控制指令设定显示屏或光标移动方向指令功能设定指令设…

在MAC OS 下配置python + Flask ,并支持pyCharm编辑器

https://www.cnblogs.com/lgphp/p/3841098.html 在MAC OS 下配置python Flask ,并支持pyCharm编辑器 flask是一个micro framework &#xff0c;伸缩性很强。可以部署到openshift 的PAAS里。这个框架上手非常快。喜欢的可以试试。 若实在MAC里&#xff0c;python已经默认安装了…

MySql简介及概念

关系型数据库系统&#xff1a;建立在关系模型上的数据库系统。 关系模型:当将日常生活中的实体&#xff08;学生&#xff09;&#xff0c;和实体的属性&#xff08;学生的学号&#xff0c;姓名&#xff09;保存数据中时&#xff0c;该如何处理该实体结构。1、数据结构可以规定&…

【51单片机快速入门指南】6.2:SPI 、八线、四线控制 LCD12864 屏幕及Proteus的仿真(支持中文汉字)

目录硬知识LCD12864简介主控芯片ST7920的功能是&#xff1a;驱动芯片ST7921的功能是&#xff1a;引脚功能时序并行通信串行通信指令存储结构操作取模软件的配置示例程序st7920.cst7920.h测试程序显示图片图片1实验现象图片2实验现象显示字符英文实验现象中文实验现象Proteus的仿…

【51单片机快速入门指南】仿真实例:幅值可调、频率可调的函数发生器(方波、三角波、正弦波)(1~10kHz)

目录效果设计思路STC89C52 Windows 10 20H2 Proteus 8 Frofessional v8.9 SP2 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 51函数发生器&#xff0c;附工程源码和Proteus仿真文件 效果 0 ~ 5V &#xff0c;50Hz的正弦波&#xff1a; 1 ~ 4V&…

VisualSvn Server介绍

1 、VisualSvn Server VisualSvn Server是免费的&#xff0c;而VisualSvn是收费的。VisualSvn是Svn的客户端&#xff0c;和Visual Studio集成在一起&#xff0c;但是不免费&#xff0c;使用AnkhSvn&#xff08;VS2008插件&#xff09;来代替VisualSvn。使用 VisualSvn Server是…

【51单片机快速入门指南】6.3:DS18B20 单总线数字温度计的多路读取

目录硬知识DS18B20介绍时序初始化时序写时序读时序命令ROM 操作命令ROM 搜索举例存贮器操作命令示例程序DS18B20.cDS18B20.h测试程序定时器中断服务函数单传感器时ID的获取 main.c单传感器读取温度和读取特定ID传感器的温度多路传感器读取普中51-单核-A2 STC89C52 Keil uVisio…

SQL多行转多列

--★转换结果如上图 1、首先创建表&#xff1a; CREATE TABLE [成绩表]( [编号] [int]IDENTITY(1,1) NOT NULL, [姓名] [varchar](50)NULL, [语文] [numeric](5, 2)NULL, [数学] [numeric](5, 2)NULL, [英语] [numeric](5, 2)NULL ) ON [PRIMARY] 2、插入测试数据 INSERT INTO …

C#通过FFmpeg获得视频文件参数

C#通过FFmpeg获得视频参数 FFmpeg简介 FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video&#xff08;录制、转换 、音/视频&#xff0c;并可将其转换为音/视频流的完整的&#xff0c;跨平台的j解决方案&#xff09;.FFmpeg的开发…

【51单片机快速入门指南】6.3.1:使用1-WIRE搜索算法搜索单总线上所有DS18B20的ID(基于二叉树)

目录源码OWSearch.c测试程序实验现象Proteus仿真实机测试普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 移植自1-WIRE搜索算法 串口部分见【51单片机快速入门指南】3.3&#xff1a;USART 串口通信 DS18B20驱动程序见【5…

卡拉丁发布第四代车用空调滤清器

5月15日&#xff0c;卡拉丁“全澄行动”第四代车用空调滤清器产品发布会在京举行&#xff0c;据悉&#xff0c;该车用空调滤清器PM2.5过滤效率可高达99%。经国家权威检测机构广东省微生物分析检测中心检测&#xff0c;卡拉丁第四代车用空调滤清器对大肠杆菌、金***葡萄球菌抗菌…

【 Grey Hack 】大数四则运算

目录效果加减乘除乘方源码版本&#xff1a;Grey Hack v0.7.3619 - Alpha 在Gs中&#xff0c;位数大于15的整数将以科学计数法显示&#xff0c;故这里提供一种基于字符串加法的四则大数运算算法。由于位数大于10的字符串无法用to_int方法转化为整数&#xff0c;因此本示例中以长…

uniapp打包小程序上传测试后,使用有的插件显示空白页面,问题解决方【有效 / 最新】

目录 问题1图在微信开发者平台正常能使用 打包上传微信小程序测试问题2图在微信开发者平台正常能使用 打包上传微信小程序测试解决步骤一1.2.3. 解决步骤二打开微信小程序官网看图跨域网址 最后 问题1图 在微信开发者平台正常能使用 未上传小程序&#xff0c;开发过程中&…

django加载本地html

django加载本地html from django.shortcuts import renderfrom django.http import HttpResponse from django.shortcuts import render,render_to_response # Create your views here. def hello(request): return render_to_response("hello.html") 传递数据到htm…

Java知多少(68)面向字符的输出流

面向字符的输出流都是类 Writer 的子类&#xff0c;其类层次结构如图 10-5 所示。 图10-5 Writer的类层次结构图表 10-3 列出了 Writer 的主要子类及说明。 表 10-3 Writer 的主要子类类名功能说明CharArrayWriter写到字符数组的输出流BufferedWriter缓冲输出字符流PipedWriter…

Linux虚拟机的替代品:Docker与WSL2上手笔记

目录安装Docker可能出现的问题内核需更新Linux 内核更新包将 WSL 2 设置为默认版本An error occurred安装镜像使用Microsoft Store安装所选的 Linux 分发手动安装镜像及文件夹的共享Docker run 命令Windows Terminal的安装在Windows Terminal中直接运行已有的容器Windows 10 20…

flask需求文件requirements.txt的创建及使用

1.简介 Python项目中必须包含一个 requirements.txt 文件&#xff0c;用于记录所有依赖包及其精确的版本号用以新环境部署。 2.进入虚拟环境然后输入pip freeze > requirements.txt 每次安装或者升级了包之后最好也一并使用这个命令更新这个文件。 需求文件的内容示例…

【联盛德W806上手笔记】一、开发环境和烧录程序

目录简介芯片外观MCU 特性安全特性低功耗模式芯片结构管脚定义极限参数开发环境SDK的获取从官网获取从Q群获取iosetting大佬 维护的wm-sdk-w806打开工程编译固件烧录现象Windows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 引自《W80X_MCU_快速入门V0.2》、《W806 MCU 芯片…

Mac os + Flask + PyCharm python开发环境集成

1. 打开mac自带终端安装virtualenv 执行 sudo easy_install virtualenv / sudo pip install virtualenv 2.安装完 virtualenv &#xff0c;打开一个 shell &#xff0c;创建自己的环境。 $ mkdir myapp $ cd myapp $ virtualenv venv New python executable in env/bin/py…