当前位置: 移动技术网 > 移动技术>移动开发>Android > Android二维码创建实例

Android二维码创建实例

2019年07月24日  | 移动技术网移动技术  | 我要评论

android二维码之创建

实现效果图:

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<encodehinttype, string> hints = new hashtable<encodehinttype, string>();
      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;
  }

}
zxingutils

3.mainactivity

@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); 

例如:

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);
    

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网