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 微型印表機列印單據