android最简单的生成二维码demo

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

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

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

相关推荐

Android 详解使用 Zxing实现前置摄像头扫描二维码生成二维码

现在二维码使用越来越广泛了,几乎处处可见,并且 公司相关的项目中几乎全部都和二维码扫描有关,所以总结一下自己的使用心路历程,总觉得要做点什么来记录自己的成长,让自己的成长有迹可循,如果恰好能够帮助到你,我当然会很开心啦。 废话结束,正文开始 Android中常用的就是zxing,开源项目地址:https://github.com/zxing/zxing 一、 二、 三、 四、 ...

Happy的博客 8801

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

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

Android生成带图片的二维码

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

无名 3816

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

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

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的博客 566

android 将字符串生成二维码

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

Adversity reveals genius; fortune conceals it. 2283

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

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

程序开发 3355

Android 文本二维码(kotlin)

在build.gradle中导入依赖。

wtgdx的博客 698

简单实现二维码

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

qingxuan521721的博客 467

Android利用zxing生成二维码

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

Jason的学习笔记 2463

Android ZXing二维码、条形码的生成,扫一扫demo

目录 导语 一、ZXing简介 二、ZXing方法类源码 BarcodeFormat:条形码格式类 EncodeHintType:编码显示风格 三、ZXing使用实战小案例 生成二维码 生成条形码 四、二维码扫一扫 导语 自从微信、支付宝推出扫一扫功能后,条形码、二维码的使用场景越来越丰富,扫码使用场景: 信息获取(名片、地图、WIFI密码、资料) 网站跳(跳到微博...

csdn_aiyang的博客 9984

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

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

DMT专栏 5290

Android集成Zxing实现二维码的扫描与生成(含动态权限)

不诗意的女程序猿不是好厨师~ 【载请注明出处:From李诗雨】 目前在做一个和机顶盒相关的app,项目中需要使用二维码扫描来绑定机顶盒。 由于工期的原因,也没时间细细研究,只是粗略集成了一下。 在此,又重新写了一个demo,以示记录。 源码demo:点击下载。 Demo说明: ①实现二维码的扫描 ②实现二维码生成 ③使用RxPermissions做了动态

cjm2484836553的博客 1万+

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

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

abc0032的专栏 9956

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

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

四国棋客 1597

Unity编程笔录--Unity二维码识别和生成二维码

二维码识别和生成二维码   前言:有的时候需要进行二维码扫描,但是二维码是怎么在Unity中进行生成呢?本文将介绍到,同时还会涉及到另外一个插件,可以进行对二维码的扫描。   准备资料: ZXing.Net.0.14.0.0.zip 作用:实现二维码生成的库 下载地址:链接:http://pan.baidu.com/s/1o67mG8i 密码:03t0 Easy Code Scann

AdamBieber的专栏 1万+

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

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

gitblog_06783的博客 905
上一篇: 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、付费专栏及课程。

余额充值