欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 带logo的二维码详解及实例

程序员文章站 2023-12-02 22:34:28
android 带logo的二维码详解及实例 好久没有写博客了,快元旦了公司的事情也不是很多,刚好和朋友一起出去玩玩,朋友是搞php的说到了每天在公司都是搞些什么二维码和...

android 带logo的二维码详解及实例

好久没有写博客了,快元旦了公司的事情也不是很多,刚好和朋友一起出去玩玩,朋友是搞php的说到了每天在公司都是搞些什么二维码和微信支付的相关东西,因为上班的时间不忙,所以随便来搞下。

二维码(quick response code),又称二维条码,它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息数据的一把钥匙。在现代商业活动中,如果一个产品是不能通过二维码来进行访问什么的,显然是不成功的。用的比较多的生成二维码的jar包有zxing.jar和core.jar,其实里面用到的都是com.google.zxing里面的东西,基本上是大同小异。

直接上代码:

activity_main.xml

<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="com.example.mainactivity" >
  <imageview
    android:id="@+id/code"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerinparent="true"
    android:text="@string/hello_world" />
</relativelayout>

mainactivity

package com.example;

import java.util.hashtable;
import android.app.activity;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.graphics.canvas;
import android.os.bundle;
import android.widget.imageview;
import com.google.zxing.barcodeformat;
import com.google.zxing.encodehinttype;
import com.google.zxing.writerexception;
import com.google.zxing.common.bitmatrix;
import com.google.zxing.qrcode.qrcodewriter;
public class mainactivity extends activity {
  private imageview code;
  private final int qr_width=300;
  private final int qr_height=300;
 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_main);
 code=(imageview) findviewbyid(r.id.code);
 createimage("weixin") ;
 }
 // 生成qr图
  private void createimage(string text) {
    try {
      // 需要引入core包
      qrcodewriter writer = new qrcodewriter();
      // 把输入的文本转为二维码
      bitmatrix martix = writer.encode(text, barcodeformat.qr_code,
          qr_width, qr_height);
     //图像数据转换,使用了矩阵转换
    hashtable<encodehinttype, string> hints = new hashtable<encodehinttype, string>();
      hints.put(encodehinttype.character_set, "utf-8");
      bitmatrix bitmatrix = new qrcodewriter().encode(text,
          barcodeformat.qr_code, qr_width, qr_height, hints);
      int[] pixels = new int[qr_width * qr_height];
      for (int y = 0; y < qr_height; y++) {
//下面这里按照二维码的算法,逐个生成二维码的图片,//两个for循环是图片横列扫描的结果
        for (int x = 0; x < qr_width; x++) {
          if (bitmatrix.get(x, y)) {
            pixels[y * qr_width + x] = 0xff000000;//黑色
          } else {
            pixels[y * qr_width + x] = 0xffffffff;//白色
          }
        }
      }
   //------------------添加图片部分------------------//
  bitmap logobmp = bitmapfactory.decoderesource(getresources(), r.drawable.ic_launcher);
      bitmap bitmap = bitmap.createbitmap(qr_width, qr_height,
          bitmap.config.argb_8888);
//设置像素点
      bitmap.setpixels(pixels, 0, qr_width, 0, 0, qr_width, qr_height);
      
      canvas canvas = new canvas(bitmap);
     //二维码
     canvas.drawbitmap(bitmap, 0,0, null);
     //图片绘制在二维码*,合成二维码图片
  canvas.drawbitmap(logobmp, bitmap.getwidth() / 2
   - logobmp.getwidth() / 2, bitmap.getheight()
   / 2 - logobmp.getheight() / 2, null);
  //------------------添加logo部分------------------//
      code.setimagebitmap(bitmap);
     
    } catch (writerexception e) {
      e.printstacktrace();
    }
  }
 
}

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