android最简单的生成二维码demo

Android开发之将字符串转化为二维码 当下手机App最火的应用,非二维码莫属了,今天我讲的是如何将一个字符串生成二维码。     二维码应用有一个很有名的开源项目ZXing。从它的官网下载Demo,我们需要的是~\ZXingDemo\libs\zxing.jar,这是ZXing的库,开始!     首先是AndroidMainfest.xml,要注册activity: 还要有相关操作权限:           阅读详情

首先,上效果图就是这个简单的界面

1.android 有自带的jar包可以生成二维码core-3.0.0.jar,其中的com.google.zxing包

2.写一个二维码生成的工具类,网上搜的话应该一大堆。

package com.example.administrator.twocodedemo;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.PointF;
import android.view.Gravity;
import android.view.View.MeasureSpec;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

import java.util.Hashtable;

/** 
*
* 	生成条形码和二维码的工具
*/
public class ZXingUtils {
	/**
	 * 生成二维码 要转换的地址或字符串,可以是中文
	 * 
	 * @param url
	 * @param width
	 * @param height
	 * @return
	 */
	public static Bitmap createQRImage(String url, final int width, final int height) {
		try {
			// 判断URL合法性
			if (url == null || "".equals(url) || url.length() < 1) {
				return null;
			}
			Hashtable
  
    hints = new Hashtable
   
    ();
			hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
			// 图像数据转换,使用了矩阵转换
			BitMatrix bitMatrix = new QRCodeWriter().encode(url,
					BarcodeFormat.QR_CODE, width, height, hints);
			int[] pixels = new int[width * height];
			// 下面这里按照二维码的算法,逐个生成二维码的图片,
			// 两个for循环是图片横列扫描的结果
			for (int y = 0; y < height; y++) {
				for (int x = 0; x < width; x++) {
					if (bitMatrix.get(x, y)) {
						pixels[y * width + x] = 0xff000000;
					} else {
						pixels[y * width + x] = 0xffffffff;
					}
				}
			}
			// 生成二维码图片的格式,使用ARGB_8888
			Bitmap bitmap = Bitmap.createBitmap(width, height,
					Bitmap.Config.ARGB_8888);
			bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
			return bitmap;
		} catch (WriterException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 生成条形码
	 *
	 * @param context
	 * @param contents
	 *            需要生成的内容
	 * @param desiredWidth
	 *            生成条形码的宽带
	 * @param desiredHeight
	 *            生成条形码的高度
	 * @param displayCode
	 *            是否在条形码下方显示内容
	 * @return
	 */
	public static Bitmap creatBarcode(Context context, String contents,
									  int desiredWidth, int desiredHeight, boolean displayCode) {
		Bitmap ruseltBitmap = null;
		/**
		 * 图片两端所保留的空白的宽度
		 */
		int marginW = 20;
		/**
		 * 条形码的编码类型
		 */
		BarcodeFormat barcodeFormat = BarcodeFormat.CODE_128;

		if (displayCode) {
			Bitmap barcodeBitmap = encodeAsBitmap(contents, barcodeFormat,
					desiredWidth, desiredHeight);
			Bitmap codeBitmap = creatCodeBitmap(contents, desiredWidth + 2
					* marginW, desiredHeight, context);
			ruseltBitmap = mixtureBitmap(barcodeBitmap, codeBitmap, new PointF(
					0, desiredHeight));
		} else {
			ruseltBitmap = encodeAsBitmap(contents, barcodeFormat,
					desiredWidth, desiredHeight);
		}

		return ruseltBitmap;
	}

	/**
	 * 生成条形码的Bitmap
	 *
	 * @param contents
	 *            需要生成的内容
	 * @param format
	 *            编码格式
	 * @param desiredWidth
	 * @param desiredHeight
	 * @return
	 * @throws WriterException
	 */
	protected static Bitmap encodeAsBitmap(String contents,
										   BarcodeFormat format, int desiredWidth, int desiredHeight) {
		final int WHITE = 0xFFFFFFFF;
		final int BLACK = 0xFF000000;

		MultiFormatWriter writer = new MultiFormatWriter();
		BitMatrix result = null;
		try {
			result = writer.encode(contents, format, desiredWidth,
					desiredHeight, null);
		} catch (WriterException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		int width = result.getWidth();
		int height = result.getHeight();
		int[] pixels = new int[width * height];
		// All are 0, or black, by default
		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;
	}

	/**
	 * 生成显示编码的Bitmap
	 *
	 * @param contents
	 * @param width
	 * @param height
	 * @param context
	 * @return
	 */
	protected static Bitmap creatCodeBitmap(String contents, int width,
											int height, Context context) {
		TextView tv = new TextView(context);
		LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
				LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
		tv.setLayoutParams(layoutParams);
		tv.setText(contents);
		tv.setHeight(height);
		tv.setGravity(Gravity.CENTER_HORIZONTAL);
		tv.setWidth(width);
		tv.setDrawingCacheEnabled(true);
		tv.setTextColor(Color.BLACK);
		tv.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
				MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
		tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight());

		tv.buildDrawingCache();
		Bitmap bitmapCode = tv.getDrawingCache();
		return bitmapCode;
	}

	/**
	 * 将两个Bitmap合并成一个
	 * 
	 * @param first
	 * @param second
	 * @param fromPoint
	 *            第二个Bitmap开始绘制的起始位置(相对于第一个Bitmap)
	 * @return
	 */
	protected static Bitmap mixtureBitmap(Bitmap first, Bitmap second,
										  PointF fromPoint) {
		if (first == null || second == null || fromPoint == null) {
			return null;
		}
		int marginW = 20;
		Bitmap newBitmap = Bitmap.createBitmap(
				first.getWidth() + second.getWidth() + marginW,
				first.getHeight() + second.getHeight(), Config.ARGB_4444);
		Canvas cv = new Canvas(newBitmap);
		cv.drawBitmap(first, marginW, 0, null);
		cv.drawBitmap(second, fromPoint.x, fromPoint.y, null);
		cv.save(Canvas.ALL_SAVE_FLAG);
		cv.restore();

		return newBitmap;
	}

}

   
  

准备工作完成,现在可以在用到的地方使用,我们这里就在MainActivity中

package com.example.administrator.twocodedemo;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.et_url)
    EditText etUrl;
    @BindView(R.id.btn_create)
    Button btnCreate;
    @BindView(R.id.iv_two_code)
    ImageView ivTwoCode;

    private String imagePath;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }


    @OnClick({R.id.btn_create, R.id.iv_two_code})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_create:

                String url = etUrl.getText().toString().trim();
                Bitmap bitmap = ZXingUtils.createQRImage(url, ivTwoCode.getWidth(), ivTwoCode.getHeight());
                ivTwoCode.setImageBitmap(bitmap);

 这其中使用了Butterknife注解工具,其中真正的代码就两句:
Bitmap bitmap = ZXingUtils.createQRImage(url, ivTwoCode.getWidth(), ivTwoCode.getHeight());
                ivTwoCode.setImageBitmap(bitmap);
简单吗?

最后附上资源地址点击打开链接

Android生成带图片的二维码 在开发中需要将信息转换为二维码存储并要求带有公司的logo,我们知道Google的Zxing开源项目就很好的帮助我们实现条形码、二维码的生成和解析,但带有logo的官网并没有提供demo,下面就通过实例看看如何实现以及Zxing的使用。 阅读详情

相关推荐

android studio 利用zxing精简版实现二维码生成/扫描(附demo)

实验项目需要二维码,在网上查了许多资料都讲的模糊不清,可能是第一次接触,各种bug,经过一番折腾终于自己捣鼓出来了。主要步骤如下:1.创建Android Studio工程项目,本文项目见:链接:https://pan.baidu.com/s/1LWUZ76vxBWhibObl3RvuIw 密码:5ite2.在自建项目中集成ZXingBar包,下载地址:链接:https://pan.baidu.co...

abc0032的专栏 9962

Android 字符串转换成二维码

#render_0_2018226100-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#render_0_2018226100-svg .error-icon{fill:#552222;}#render_...

weixin_29800319的博客 569

Android二维码开源项目zxing用例简化和生成二维码、条形码

上一篇讲到:Android二维码开源项目zxing编译,编译出来后有一个自带的测试程序:CaptureActivity比较复杂,我只要是把一些不用的东西去掉,用看起来更方便,二维码和条形码的流行性自不必说了。 自带的例子,目录结构如下: 修改后的程序目录结构,去掉了很多功能,如果分享、设置等。 先上效果图          扫描ZXing生成的条形码和二维码结果

DMT专栏 5296

android 将字符串生成二维码

之前项目有个二维码打印的需求,需要通过字符串生成一个二维码图片(bitmap) 直接上代码, 简单好用 需要注意的是,这个代码依赖于com.google.zxing包 public static Bitmap Create2DCode(String str) { //生成二维矩阵,编码时要指定大小, //不要生成了图片以后再进行缩放,以防模糊导致识别失败 ...

Adversity reveals genius; fortune conceals it. 2290

android二维码的生成及解析(Demo)

android二维码的生成及解析(Demo)

文字,图片的二维码生成

文字生成二维码,资源图片生成带有中心logo的二维码,图册中选择图片进行图片压缩后生成logo二维码,兼容安卓7.0

Android 文本转二维码(kotlin)

在build.gradle中导入依赖。

wtgdx的博客 703

[cadence]Allegro STEP-3D模型导入、匹配、导出的方法及注意事项

如果 Avaliable里面没有和symbols对应的文件,说明没有对应的3D模型,这时候需要在你的step路径下创建y与 .dra 封装文件相同名称的。选择好 Output file 和 name 之后呢,点击 Export。首先打开Setup - Step Package Mapping。注意:路径中不能有中文名称,有的话你会发现不能导出,也不会报错。在路径下将下载或者自己做的 3D模型文件改名之后,重新打开。可在View -> 3D View。

LuDvei的博客 2万+

【Android学习】Android二维码工具开发

本文作者:编写日期:2024年03月24日本文字数:1244个字符关注可了解更多的教程。问题或建议,请公众号留言;摘要:本文主要介绍使用Android和Android studio完成开发一个二维码生成和识别小工具。本文小工具的二维码生成模块可以把文本内容生成二维码,二维码识别(扫描)模块可以识别标准的二维码并把识别结果显示出来。本文小工具(安卓二维码识别和生成工具)提供源码下载方式,源码获取方式见文章未处。/ 开始 /

程序开发 3365

channel || channelGroup || ctx.writeAndFlush()发送字符串消息客户端接收不到的原因

一、原因 网络上传播的数据都是字节(二进制数据)类型。我们如果直接向网络流里面写入一个对象(如:String对象),是无法传输的。只有将对象序列化(转换为可以传输的字节类型)之后,才可以进行传输。所以问题的根源就很清楚了,需要把字符串转换成字节进行传输。、 二、解决办法 1、手动序列化 服务端: channelGroup.writeAndFlush(Unpooled.copiedBuffer("【客户端】"+remoteAddress+"已下线"+format.format(new Date()), Cha

haohaoxuexiyai的博客 4060

运放电路实战:5分钟搞定加法器与减法器的电路设计与调试(附避坑指南)

本文从实战角度出发,详细讲解了运算放大器加法器与减法器的电路设计与调试方法。针对加法器,重点分析了利用“虚地”特性简化设计和选型要点;对于减法器,则深入剖析了决定精度的核心——电阻匹配问题,并提供了使用电阻网络等提升共模抑制比的实用策略。文章还分享了从仿真到实物焊接的完整流程与常见避坑技巧,帮助电子爱好者快速掌握这两种基础运放电路。

weixin_28323057的博客 466

简单实现二维码

简单实现二维码生成器 原创 2017年10月08日 11:07:26 标签:简单实现二维码生成器 首先上网下载一个libzxing文件夹,网址为:https://github.com/xuyisheng/ZXingLib 接着把libzxing工程导入到工作空间中,步骤如下:      先点击file-->project-->选

qingxuan521721的博客 467

华为擎云W515 PGUV-WBY0安装银河麒麟V10全流程解析

本文详细解析了华为擎云W515 PGUV-WBY0安装银河麒麟V10系统的全流程,包括准备工作、镜像下载与校验、启动盘制作、BIOS设置、安装过程关键选择、系统初始化及常见问题排查。特别针对ARM架构设备提供了实用技巧,帮助用户顺利完成国产化系统的部署与优化。

weixin_28725949的博客 696

Android扫描二维码及生成二维码Demo

制作二维码扫描及生成Demo首先要导入Google Zxing包code.jar。 Zxing源码及jar包下载地址:http://code.google.com/p/zxing/ Demo下载地址:http://download.youkuaiyun.com/detail/ericfantastic/9070921 二维码扫描及生成二维码Demo效果图:        导入相关的Zxing类

EricFantastic 3919

从理论到实践:用CST微波工作室完成单站雷达RCS仿真的完整指南

本文提供了一份利用CST微波工作室进行单站雷达RCS仿真的完整实践指南。文章深入剖析了从求解器选择(重点推荐积分方程法)、模型与材料设置、平面波激励定义到后处理分析的完整逻辑链条,旨在帮助工程师不仅完成仿真,更能理解其背后的物理原理与工程考量,从而高效、精准地评估目标的电磁散射特性。

weixin_29256771的博客 180

从URDF到Gazebo:一个完整的ROS2机械臂仿真与运动控制实战指南

本文提供了一个完整的ROS2机械臂仿真与运动控制实战指南。详细讲解了从URDF建模、ROS2 Control配置到Gazebo物理仿真的全流程,重点介绍了如何利用MoveIt2快速搭建高级运动规划系统,并解决实际部署中的常见问题,帮助开发者高效、安全地进行机器人算法验证与开发。

red88的博客 573

Android利用zxing生成二维码

感谢大佬:https://blog.youkuaiyun.com/mountain_hua/article/details/80646089 **gayhub上的zxing可用于生成二维码,识别二维码 gayhub地址:https://github.com/zxing/zxing 此文只是简易教程,文末附有完整代码和demo下载地址,进入正题: (1)下载并导入zxing.jar包 下载: zxing.jar...

Jason的学习笔记 2492

使用 Pfam 和 InterProScan 进行蛋白质家族和功能域的分析

本文介绍了使用Pfam和InterProScan进行蛋白质家族与功能域分析的方法。主要内容包括:1) Pfam数据库的本地化使用,通过hmmscan工具比对Pfam-A.hmm数据库,并提供了批量处理Python脚本;2) InterProScan的安装配置与命令行参数详解,支持多数据库整合分析;3) 补充介绍了基于curl的Uniprot在线查询方法。文章提供了从软件安装到实战分析的完整流程,适用于本地化、批量化蛋白质功能注释需求,特别是无网络环境或大规模数据分析场景,适合不同水平的生物信息学用户。

Protein Designer的博客 1918

安卓开发学习之二维码的生成、保存和扫描

背景 近两日辞了实习的工作以准备毕业,现在写完了毕设论文,只待飞赴学校。现在无事可做,便从二维码的学习开始,再次学习新的技术知识,于是记录这个demo项目的完成过程。 导包 在项目gradle文件的指明使用仓库里,加上jitpack.io buildscript { repositories { ... maven { url 'http...

四国棋客 1607

RT-DETR改进策略【卷积层】| CVPR2025 GBConv轻量门控瓶颈卷积 低秩瓶颈降参 + 门控聚焦形态,强效捕捉纤细目标

裂缝形态不规则、纹理纤细,传统卷积参数大、计算冗余,且无法动态聚焦裂缝形态;背景噪声强易干扰特征提取,需要轻量且能自适应聚焦裂缝形态的卷积单元,因此提出轻量门控瓶颈卷积 GBC。

Limiiiing的博客 140

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

android zxing demo 运行测试扫描生成二维码

android zxing demo 运行测试扫描生成二维码前言下载新建一个工程打开下载的zxing工程文件目录迁移代码更改包名编译真

杨迪龙的博客 1535

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android二维码扫描Demo程序源码:实现高效二维码识别的解决方案

Android二维码扫描Demo程序源码:实现高效二维码识别的解决方案 去发现同类优质开源项目:https://gitcode.com/ 在移动应用开发中,二维码扫描是常见且关键的功能之一。今天,我们就来推荐一款开源的Android二维码扫描Demo程序源码,帮助开发者快速掌握二维码识别技术。 项目介绍 Android二维码扫描Demo程序源码是一款专为Android平台设计的二维码扫描工具。该源...

gitblog_06783的博客 906

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

最简单的二维码扫描Android Application Demo

最简单的二维码扫描Android Application Demo

3158

最简单的扫描生成二维码--附Demo

最简单的扫描生成二维码 ONE Goal,ONE Passion! 现在的app扫描二维码几乎就是标配,而且扫描二维码的demo是多如牛毛.可是几乎都是大篇的copy许多类.而且使用起来很是繁琐.我就是深受其害.每次都要搞半天.很是愤怒.今天弄了一下午,终于简化了一个我个人认为目前我见到过的最最简单的demo. 第1步:准备工作—–当然了,ZXing还是必须的.只是这是个简化了的Zxing.ja

fengltxx的博客 6208
上一篇: android图形验证码
下一篇: Android 如何使用gradle.properties
coder_yao
博客等级 码龄10年 9粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值