效果圖如下:
制作過程很簡單的就是在原始的二維碼圖片上添加一個logn圖標,代碼的注釋寫得很詳細,也就不給大家啰嗦了
package com.example.day44_02_qrcodewithlogin; import java.util.HashMap; import java.util.Map; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.os.Bundle; import android.view.Menu; 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 imageView_main ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { imageView_main = (ImageView) findViewById(R.id.imageView_main); String content = "我們要畢業了"; createQRCode(content,500,500); } /** * 用於創建一個二維碼 * @param content * @param width * @param height */ private void createQRCode(String content, int width, int height) { try { //1,創建實例化對象 QRCodeWriter writer = new QRCodeWriter() ; //2,設置字符集 Map<EncodeHintType, String> map = new HashMap<EncodeHintType, String>(); map.put(EncodeHintType.CHARACTER_SET, "UTF-8"); //3,通過encode方法將內容寫入矩陣對象 BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height,map); //4,定義一個二維碼像素點的數組,向每個像素點中填充顏色 int[] pixels = new int[width*height]; //5,往每一像素點中填充顏色(像素沒數據則用黑色填充,沒有則用彩色填充,不過一般用白色) for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (matrix.get(j, i)) { pixels[i*width+j] = 0xff000000; }else { pixels[i*width+j] = 0xffffffff; } } } //6,創建一個指定高度和寬度的空白bitmap對象 Bitmap bm_QR = Bitmap.createBitmap(width, height, Config.ARGB_8888); //7,將每個像素的顏色填充到bitmap對象 bm_QR.setPixels(pixels, 0, width, 0, 0, width, height); //8,創建一個bitmap對象用於作為其圖標 Bitmap bm_login = BitmapFactory.decodeResource(getResources(), R.drawable.img_kf_qq); //9,創建一個方法在二維碼上添加一張圖片 if (addLogin(bm_QR,bm_login) != null) { imageView_main.setImageBitmap(addLogin(bm_QR,bm_login)); } } catch (WriterException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 用於向創建的二維碼中添加一個logn * @param bm_QR * @param bm_login * @return */ private Bitmap addLogin(Bitmap bm_QR, Bitmap bm_login) { if (bm_QR == null) { return null; } if (bm_login == null) { return bm_QR ; } //獲取圖片的寬高 int bm_QR_Width = bm_QR.getWidth() ; int bm_QR_Height = bm_QR.getHeight(); int bm_login_Width = bm_login.getWidth() ; int bm_login_Height = bm_login.getHeight(); //設置logn的大小為二維碼整體大小的1/5 float scale_login = bm_QR_Width*1.0f /5/bm_login_Width ; Bitmap bitmap = Bitmap.createBitmap(bm_QR_Width, bm_QR_Height, Bitmap.Config.ARGB_8888); try { Canvas canvas = new Canvas(bitmap); canvas.drawBitmap(bm_QR, 0, 0, null); canvas.scale(scale_login, scale_login, bm_QR_Width / 2, bm_QR_Height / 2); canvas.drawBitmap(bm_login, (bm_QR_Width - bm_login_Width) / 2, (bm_QR_Height - bm_login_Height) / 2, null); canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore(); } catch (Exception e) { bitmap = null; e.getStackTrace(); } return bitmap; } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }