Android條碼產生執行個體

來源:互聯網
上載者:User

標籤:android   style   blog   http   color   os   io   for   檔案   

準備目前Google的zxing jar包不支援中文碼的產生,所以本樣本中也不支援中文。需要中文支援的朋友,請自行修改zxing.jar包再編譯下。 廢話不說,直接上:

具體範例程式碼如下:

package com.test.createcode;import android.app.Activity;import android.graphics.Bitmap;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.Toast;import com.google.zxing.BarcodeFormat;import com.google.zxing.MultiFormatWriter;import com.google.zxing.WriterException;import com.google.zxing.common.BitMatrix;/** * 用於建立和掃描二維碼 */public class CreateCodeActivity extends Activity {       /**     * 將要產生二維碼的內容     */    private EditText codeEdit;    /**     * 產生二維碼代碼     */    private Button twoCodeBtn;    /**     * 用於展示產生二維碼的imageView     */    private ImageView codeImg;       /**     * 產生一維碼按鈕     */    private Button oneCodeBtn;    /**     * 介面的初始化事件     *     * @param savedInstanceState Bundle對象     */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        initView();        setListener();    }    /**     * 用於初始化介面展示的view     */    private void initView() {        codeEdit = (EditText) findViewById(R.id.code_edittext);        twoCodeBtn = (Button) findViewById(R.id.code_btn);        oneCodeBtn = (Button) findViewById(R.id.btn_code);        codeImg = (ImageView) findViewById(R.id.code_img);    }    /**     * 設定產生二維碼和掃描二維碼的事件     */    private void setListener() {        twoCodeBtn.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                String str = codeEdit.getText().toString().trim();                Bitmap bmp = null;                try {                    if (str != null && !"".equals(str)) {                        bmp = CreateTwoDCode(str);                    }                } catch (WriterException e) {                    e.printStackTrace();                }                if (bmp != null) {                    codeImg.setImageBitmap(bmp);                }            }        });        oneCodeBtn.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View view) {                String str = codeEdit.getText().toString().trim();                int size = str.length();                for (int i = 0; i < size; i++) {                    int c = str.charAt(i);                    if ((19968 <= c && c < 40623)) {                        Toast.makeText(CreateCodeActivity.this, "產生條碼的時刻不能是中文", Toast.LENGTH_SHORT).show();                        return;                    }                }                Bitmap bmp = null;                try {                    if (str != null && !"".equals(str)) {                        bmp = CreateOneDCode(str);                    }                } catch (WriterException e) {                    e.printStackTrace();                }                if (bmp != null) {                    codeImg.setImageBitmap(bmp);                }            }        });    }    /**     * 將指定的內容產生成二維碼     *     * @param content 將要產生二維碼的內容     * @return 返回產生好的二維碼事件     * @throws WriterException WriterException異常     */    public Bitmap CreateTwoDCode(String content) throws WriterException {        // 產生二維矩陣,編碼時指定大小,不要產生了圖片以後再進行縮放,這樣會模糊導致識別失敗        BitMatrix matrix = new MultiFormatWriter().encode(content,                BarcodeFormat.QR_CODE, 300, 300);        int width = matrix.getWidth();        int height = matrix.getHeight();        // 二維矩陣轉為一維像素數組,也就是一直橫著排了        int[] pixels = new int[width * height];        for (int y = 0; y < height; y++) {            for (int x = 0; x < width; x++) {                if (matrix.get(x, y)) {                    pixels[y * width + x] = 0xff000000;                }            }        }        Bitmap bitmap = Bitmap.createBitmap(width, height,                Bitmap.Config.ARGB_8888);        // 通過像素數組產生bitmap,具體參考api        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);        return bitmap;    }    /**     * 用於將給定的內容產生成一維碼 註:目前產生內容為中文的話將直接報錯,要修改底層jar包的內容     *     * @param content 將要產生一維碼的內容     * @return 返回產生好的一維碼bitmap     * @throws WriterException WriterException異常     */    public Bitmap CreateOneDCode(String content) throws WriterException {        // 產生一維條碼,編碼時指定大小,不要產生了圖片以後再進行縮放,這樣會模糊導致識別失敗        BitMatrix matrix = new MultiFormatWriter().encode(content,                BarcodeFormat.CODE_128, 500, 200);        int width = matrix.getWidth();        int height = matrix.getHeight();        int[] pixels = new int[width * height];        for (int y = 0; y < height; y++) {            for (int x = 0; x < width; x++) {                if (matrix.get(x, y)) {                    pixels[y * width + x] = 0xff000000;                }            }        }        Bitmap bitmap = Bitmap.createBitmap(width, height,                Bitmap.Config.ARGB_8888);        // 通過像素數組產生bitmap,具體參考api        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);        return bitmap;    }}

main.xml檔案如下:

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"                android:orientation="vertical" android:layout_width="fill_parent"                android:layout_height="fill_parent" android:background="#ff999999">      <EditText android:layout_width="fill_parent" android:id="@+id/code_edittext"                android:layout_height="wrap_content" android:text=""/>      <LinearLayout android:layout_width="wrap_content"                    android:layout_height="wrap_content" android:orientation="horizontal"                    android:layout_marginTop="20dip" android:layout_gravity="center_horizontal">          <Button android:id="@+id/code_btn" android:layout_width="100dip"                  android:layout_height="40dip" android:text="產生二維碼"/>          <Button android:id="@+id/btn_code" android:layout_width="100dip" android:layout_height="40dip"                  android:text="產生一維碼"></Button>      </LinearLayout>              <ImageView android:layout_width="wrap_content" android:id="@+id/code_img"                 android:layout_height="wrap_content" android:layout_marginTop="20dip"                 android:layout_gravity="center_horizontal"/>  </LinearLayout>  

資訊清單檔如下:

<?xml version="1.0" encoding="utf-8"?>  <manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.test.createcode"      android:versionCode="1"      android:versionName="1.0" >        <uses-sdk android:minSdkVersion="10" />        <application          android:icon="@drawable/ic_launcher"          android:label="@string/app_name" >          <activity              android:name=".CreateCodeActivity"              android:label="@string/app_name" >              <intent-filter>                  <action android:name="android.intent.action.MAIN" />                    <category android:name="android.intent.category.LAUNCHER" />              </intent-filter>          </activity>      </application>    </manifest>  

最後不要下載個zxing.jar放在libs檔案夾中,即可。(上述的BitMatrix及BarcodeFormat等類是依賴於zxing.jar的。)

http://code.google.com/p/zxing/

來自:http://blog.csdn.net/chenshufei2/article/details/8682934 

Android條碼產生執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.