博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Andoid开发中生成二维码
阅读量:6250 次
发布时间:2019-06-22

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

hot3.png

第一步:

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

        
        
        

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

core.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;    @Override    protected 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

你可能感兴趣的文章
debian9安装pyenv管理python版本
查看>>
Zabbix图像集中展示Graphtrees开源
查看>>
字符串转数字
查看>>
知遇几何
查看>>
学习Linux计划书
查看>>
Android 调用系统播放器
查看>>
抵制代码重写
查看>>
javascript 实现图片的拖动效果
查看>>
linux的strace命令(详解)
查看>>
记一次环保宣传
查看>>
[转]Intel C++编译器的预定义宏(Windows版、Linux版)
查看>>
***测试02------查点总结
查看>>
1Z0-052 中英文解析(2)
查看>>
Android accessibility service detect notification
查看>>
调度器状态机的单片机上用的小系统
查看>>
Windows7与Window2008 64位IIS7上面DCOM配置Excel、Word等
查看>>
绘画与照片修饰
查看>>
Google Adwords关键词即将告别完全精确匹配
查看>>
原生JavaScript文件上传带进度条
查看>>
kong 负载均衡
查看>>