Androidアプリで1次元バーコードを作成する方法1
今回はAndroidアプリで1次元バーコードを作成する方法を紹介する。
バーコードの作成は、Googleが開発した「ZXing」というライブラリを使用する。
1次元バーコードには様々な規格が存在するが、今回は「CODABAR(NW-7)」規格の作成方法を紹介する。
<方法概要>
1.Gradleの設定ファイルにZXingの依存関係を追記する
2.バーコードを表示するためのビューを追加する
3.バーコードを生成するためのソースコードを記述する
<方法詳細>
1.Gradleの設定ファイルにZXingの依存関係を追記する
プロジェクトにバーコードのライブラリであるZXingを取り込むために、build.gradleファイルの「dependencies」に「compile group: 'com.google.zxing', name: 'core', version: '3.2.1'」を追加する。
build.gradle
apply plugin: 'com.android.application' android { compileSdkVersion 24 buildToolsVersion "24.0.2" defaultConfig { applicationId "biz.accele.samplebarcode" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:24.2.0' compile group: 'com.google.zxing', name: 'core', version: '3.2.1' //<-追加 }
追加すると画面右上に「Sync Now」のリンクが表示されるので、そのリンクを押下する。
2.バーコードを表示するためのビューを追加する
生成したバーコードを表示するための「ImageView」を画面レイアウト用のxmlに追加する。
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:background="#F0E68C" tools:context="biz.accele.samplebarcode.MainActivity"> <!-- バーコードを表示するためのImageView --> <ImageView android:id="@+id/result_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> </RelativeLayout>
3.バーコードを生成するためのソースコードを記述する
手順1でプロジェクトに取り込んだ「ZXing」ライブラリを使用して、バーコードを生成する。
MainActivity.java
package biz.accele.samplebarcode; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Matrix; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView; import com.google.zxing.BarcodeFormat; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.oned.CodaBarWriter; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView imageView = (ImageView) findViewById(R.id.result_view); // バーコードの各種設定 String targetData = "123456789012345"; //バーコードに変換する対象データ int width = 1000; //作成するバーコードの幅 int height = 200; //作成するバーコードの高さ // CODABAR規格用のデータ変換クラスをインスタンス化する CodaBarWriter writer = new CodaBarWriter(); try { // 対象データを変換する BitMatrix bitMatrix = writer.encode(targetData, BarcodeFormat.CODABAR, width, height); //...(1) // BitMatrixのデータが「true」の時は「黒」を設定し、「false」の時は「白」を設定する //...(2) int[] pixels = new int[width * height]; for (int y = 0; y < height; y++) { int offset = y * width; for (int x = 0; x < width; x++) { pixels[offset + x] = bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE; } } // ビットマップ形式に変換する Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); //ビットマップの回転(縦に表示するため) Matrix mat = new Matrix(); mat.postRotate(90); Bitmap bmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, mat, true); // イメージビューに表示する imageView.setImageBitmap(bmp); } catch (WriterException e) {} } }
[解説]
(1)
結果として受け取るBitMatrixは、booleanの2次元配列の様な型であり(厳密には異なるがイメージとして)、1要素が1ピクセルに相当する。
(2)
BitMatrixの情報に従い、要素が「true」の場合は塗りつぶし、要素が「false」の場合は塗りつぶさない処理を行えば、バーコードの描画情報となる。
[実行結果]