ZXing简介:
ZXing是谷歌的一个开源项目,用Java实现多种格式的ID/2D条码图像处理库,它包含了联系到其他语言的端口。
Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。
其实ZXing项目里的Android实现太过复杂多余东西太多,好多用不到,可以对其进行简化。简化过程可以参看:http://www.oschina.net/question/54100_28521
自己需要新建一个项目,把需要的类,包抽取出来放到这个新项目中
在修改的过程中,有很多是关于R 资源的问题,在此我们需要将Values 里面的两个xml资源文件拷入项目中:colos.xml
和ids.xml 。 现在看看error 是不是少了很多。 剩下的就是包名问题了。
使用的时候可以把这个抽取好的项目作为一个Library导入需要实现二维码功能的项目中。
在新项目中需要声明权限:
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.VIBRATE" />
同时声明使用到的Activity:
<activity android:name="com.xys.libzxing.zxing.activity.CaptureActivity" android:label="@string/app_name" > </activity>
MainActivity
package com.example.zxing_test; import javax.crypto.spec.IvParameterSpec; import com.xys.libzxing.zxing.activity.CaptureActivity; import com.xys.libzxing.zxing.encoding.EncodingUtils; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private Button bt_Scran; private TextView tv_result; private Button bt_QRcode; private EditText et_mstring; private CheckBox mCheckBox; private ImageView iv_QRCode; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt_Scran = (Button) findViewById(R.id.bt_scran); tv_result = (TextView) findViewById(R.id.tv_result); et_mstring = (EditText) findViewById(R.id.et_mstring); bt_QRcode = (Button) findViewById(R.id.bt_QRcode); mCheckBox = (CheckBox) findViewById(R.id.cb_logo); iv_QRCode = (ImageView) findViewById(R.id.iv_mQRcode); /** * 扫描解析二维码 */ bt_Scran.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class), 0); } }); /** * 生成二维码 */ bt_QRcode.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String mString = et_mstring.getText().toString(); if(mString.equals("")){ Toast.makeText(MainActivity.this, "不能为空", 0).show(); }else{ Bitmap bitmap = EncodingUtils.createQRCode(mString, 500, 500, mCheckBox.isChecked()?BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher):null); iv_QRCode.setImageBitmap(bitmap); } } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK){ Bundle bundle = data.getExtras(); String result = bundle.getString("result"); tv_result.setText(result); } } }
布局文件
<LinearLayout 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:orientation="vertical" tools:context="com.example.zxing_test.MainActivity" > <Button android:id="@+id/bt_scran" android:layout_width="match_parent" android:layout_height="40dp" android:text="scran" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="扫描结果" /> <TextView android:id="@+id/tv_result" android:layout_width="wrap_content" android:layout_height="50dp" /> <EditText android:id="@+id/et_mstring" android:layout_width="match_parent" android:layout_height="50dp" android:maxLines="2" > </EditText> <CheckBox android:id="@+id/cb_logo" android:layout_width="match_parent" android:layout_height="20dp" android:text=" logo" > </CheckBox> <Button android:id="@+id/bt_QRcode" android:layout_width="match_parent" android:layout_height="40dp" android:text="生成二维码" /> <ImageView android:id="@+id/iv_mQRcode" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
时间: 2024-11-13 06:54:47