ZXing GitHub
Android建立QR Code
建立一個新專案 Qrcodegen,Android Studio 會自動生成 activity_main.xml、MainActivity.java。
在 activity_main 放一個 button 和 一個 ImageView。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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.tw.whalin.qrcodegen.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:clickable="true"
android:onClick="onbuttonclick"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_below="@+id/button"
android:layout_centerHorizontal="true"
android:layout_marginTop="45dp"/>
</RelativeLayout>
到 http://repo1.maven.org/maven2/com/google/zxing/core/ 下載已編譯好的類別庫 core.jar,當前的版本是 core-3.2.1.jar 並放至 \專案目錄\app\libs\ 下。
MainActivity.java
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
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 java.util.EnumMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onbuttonclick(View v)
{
// QR code 的內容
String QRCodeContent = "QR code test";
// QR code 寬度
int QRCodeWidth = 200;
// QR code 高度
int QRCodeHeight = 200;
// QR code 內容編碼
Map<EncodeHintType, Object> hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class);
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
MultiFormatWriter writer = new MultiFormatWriter();
try
{
// 容錯率姑且可以將它想像成解析度,分為 4 級:L(7%),M(15%),Q(25%),H(30%)
// 設定 QR code 容錯率為 H
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
// 建立 QR code 的資料矩陣
BitMatrix result = writer.encode(QRCodeContent, BarcodeFormat.QR_CODE, QRCodeWidth, QRCodeHeight, hints);
// ZXing 還可以生成其他形式條碼,如:BarcodeFormat.CODE_39、BarcodeFormat.CODE_93、BarcodeFormat.CODE_128、BarcodeFormat.EAN_8、BarcodeFormat.EAN_13...
//建立點陣圖
Bitmap bitmap = Bitmap.createBitmap(QRCodeWidth, QRCodeHeight, Bitmap.Config.ARGB_8888);
// 將 QR code 資料矩陣繪製到點陣圖上
for (int y = 0; y<QRCodeHeight; y++)
{
for (int x = 0;x<QRCodeWidth; x++)
{
bitmap.setPixel(x, y, result.get(x, y) ? Color.BLACK : Color.WHITE);
}
}
ImageView imgView = (ImageView) findViewById(R.id.imageView);
// 設定為 QR code 影像
imgView.setImageBitmap(bitmap);
}
catch (WriterException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
相關筆記 ----
讓 ZXing 代勞,掃描 QR碼(QR code)
結合 ZXing 掃描 QRcode
Genymotion 模擬器執行 Epson 範例 app,連接 TM-T70II 微型印表機列印單據