二维码生成扫描

添加依赖:

compile 'com.google.zxing:core:3.1.0'
compile 'cn.bingoogolapple:bga-qrcodecore:1.0.7@aar'
compile 'cn.bingoogolapple:bga-zxing:1.0.7@aar'

注册文件:
 
 
 
 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
//调用相机
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
//震动(用不到震动可以去掉)
<uses-permission android:name="android.permission.VIBRATE" />
//闪光灯(如不用闪光灯可以去掉)
<uses-permission android:name="android.permission.FLASHLIGHT" />


<activity android:name=".ScanActivity"></activity>

<activity android:name=".GenerateActivity" />


布局:
activity_generate:
 
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_margin="15dp"
        android:id="@+id/et_input"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        android:orientation="horizontal"
        >

        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="48dp"
            android:text="创建二维码"
            android:textSize="22sp"
            android:gravity="center"
            android:textColor="@color/colorWrite"
            android:background="@color/colorPrimary"
            android:id="@+id/tv_create"
            />

        <TextView
            android:layout_marginLeft="15dp"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="48dp"
            android:text="创建logo二维码"
            android:textSize="22sp"
            android:gravity="center"
            android:textColor="@color/colorWrite"
            android:background="@color/colorPrimary"
            android:id="@+id/tv_createlogo"
            />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        android:gravity="center"
        android:orientation="horizontal"
        >

        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@mipmap/logo"
            android:scaleType="centerCrop"
            android:id="@+id/iv_logo"
            />

        <ImageView
            android:layout_marginLeft="40dp"
            android:layout_width="160dp"
            android:layout_height="160dp"
            android:src="@mipmap/qr_m"
            android:scaleType="centerCrop"
            android:id="@+id/iv_qr"
            />

    </LinearLayout>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_margin="15dp"
        android:text="识别"
        android:textSize="22sp"
        android:gravity="center"
        android:textColor="@color/colorWrite"
        android:background="@color/colorPrimary"
        android:id="@+id/tv_read"
        />

</LinearLayout>
 
 
 
 
 
 
activity_scan:
 
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <cn.bingoogolapple.qrcode.zxing.ZXingView
        android:id="@+id/zx_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:qrcv_animTime="1000"
        app:qrcv_borderColor="@android:color/white"
        app:qrcv_borderSize="1dp"
        app:qrcv_cornerColor="@color/colorPrimaryDark"
        app:qrcv_cornerLength="20dp"
        app:qrcv_cornerSize="3dp"
        app:qrcv_maskColor="#99000000"
        app:qrcv_rectWidth="200dp"
        app:qrcv_scanLineColor="@color/colorPrimaryDark"
        app:qrcv_scanLineSize="1dp"
        app:qrcv_topOffset="90dp" />


</LinearLayout>
 
 
 
 
 
 
activity_mian:
 
 
 
 
 
 
<?xml version="1.0" encoding="utf-8"?>
<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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="baway.com.erweimademo.MainActivity">

    <TextView
        android:id="@+id/scan_qrcode"
        android:layout_marginTop="15dp"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="@color/colorTransla"
        android:textColor="@color/colorWrite"
        android:textSize="20sp"
        android:gravity="center"
        android:text="扫描二维码" />

    <TextView
        android:id="@+id/generate_qrcode"
        android:layout_marginTop="15dp"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="@color/colorTransla"
        android:textColor="@color/colorWrite"
        android:textSize="20sp"
        android:gravity="center"
        android:text="生成和识别图片二维码" />

</LinearLayout>
 
 
 
 
 
 
 
 
MianActivity:
 
 
public class MainActivity extends Activity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.generate_qrcode).setOnClickListener(this);
        findViewById(R.id.scan_qrcode).setOnClickListener(this);


    }

    @Override
    public void onClick(View v) {

        switch (v.getId()){

            case R.id.scan_qrcode:

                startActivity(new Intent(MainActivity.this,ScanActivity.class));

                break;

            case R.id.generate_qrcode:

                startActivity(new Intent(MainActivity.this,GenerateActivity.class));

                break;
        }

    }
}
 
 
 
 
 
 
GenerateActivity:
 
 
public class GenerateActivity extends Activity implements View.OnClickListener {

    private ImageView ivqr;
    private TextView tvread;
    private EditText etinput;
    private TextView tvcreate;
    private TextView tvcreatelogo;
    private ImageView ivlogo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_generate);
        this.ivlogo = (ImageView) findViewById(R.id.iv_logo);
        this.tvcreatelogo = (TextView) findViewById(R.id.tv_createlogo);
        this.tvcreate = (TextView) findViewById(R.id.tv_create);
        this.etinput = (EditText) findViewById(R.id.et_input);

        this.tvread = (TextView) findViewById(R.id.tv_read);
        this.ivqr = (ImageView) findViewById(R.id.iv_qr);

        tvcreatelogo.setOnClickListener(this);
        tvcreate.setOnClickListener(this);
        tvread.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.tv_create:            //创建二维码

                if(!checkIsEmpty())
                    createQRCode();
                else
                    Toast.makeText(GenerateActivity.this, "输入框不能为空", Toast.LENGTH_SHORT).show();

                break;

            case R.id.tv_createlogo:       //创建带logo

                if(!checkIsEmpty())
                    createQRCodeWithLogo();
                else
                    Toast.makeText(GenerateActivity.this, "输入框不能为空", Toast.LENGTH_SHORT).show();

                break;

            case R.id.tv_read:      //识别

                decodeQRCode();

                break;
        }
    }


    /**
     * 校验输入框是否有内容
     * 没有内容返回true,有内容返回false
     * @return
     */
    private boolean checkIsEmpty(){

        return TextUtils.isEmpty(etinput.getText().toString().trim());

    }


    /**
     * 创建二维码
     */
    private void createQRCode() {

        //生成二维码,第一个参数为要生成的文本,第二个参数为生成尺寸,第三个参数为生成回调
        QRCodeEncoder.encodeQRCode(etinput.getText().toString().trim(), DisplayUtils.dp2px(GenerateActivity.this, 160), new QRCodeEncoder.Delegate() {
            /**
             * 生成成功
             * @param bitmap
             */
            @Override
            public void onEncodeQRCodeSuccess(Bitmap bitmap) {
                ivqr.setImageBitmap(bitmap);
            }

            /**
             * 生成失败
             */
            @Override
            public void onEncodeQRCodeFailure() {
                Toast.makeText(GenerateActivity.this, "生成中文二维码失败", Toast.LENGTH_SHORT).show();
            }
        });
    }

    /**
     * 创建带logo二维码
     */
    private void createQRCodeWithLogo() {

        //生成二维码,第一个参数为要生成的文本,第二个参数为生成尺寸,第三个参数为生成二维码颜色,第四个参数为logo资源,第五个参数为生成回调
        QRCodeEncoder.encodeQRCode(etinput.getText().toString().trim(), DisplayUtils.dp2px(GenerateActivity.this, 160), Color.parseColor("#000000"), ((BitmapDrawable)ivlogo.getDrawable()).getBitmap(), new QRCodeEncoder.Delegate() {
            @Override
            public void onEncodeQRCodeSuccess(Bitmap bitmap) {
                ivqr.setImageBitmap(bitmap);
            }

            @Override
            public void onEncodeQRCodeFailure() {
                Toast.makeText(GenerateActivity.this, "生成带logo的中文二维码失败", Toast.LENGTH_SHORT).show();
            }
        });
    }

    /**
     * 解析
     */
    public void decodeQRCode() {
        Bitmap bitmap = ((BitmapDrawable)ivqr.getDrawable()).getBitmap();
        decode(bitmap, "解析二维码失败");
    }

    /**
     * 解析二维码,可以解析二维码、带logo二维码、条形码
     * @param bitmap
     * @param err
     */
    private void decode(Bitmap bitmap, final String err) {
        QRCodeDecoder.decodeQRCode(bitmap, new QRCodeDecoder.Delegate() {
            @Override
            public void onDecodeQRCodeSuccess(String result) {
                Toast.makeText(GenerateActivity.this, result, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onDecodeQRCodeFailure() {
                Toast.makeText(GenerateActivity.this, err, Toast.LENGTH_SHORT).show();
            }
        });
    }

}
 
 
 
 
 
 
ScanActivity:
 
 
public class ScanActivity extends Activity implements QRCodeView.Delegate {

    private QRCodeView mQR;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan);

        mQR = (ZXingView) findViewById(R.id.zx_view);

        //设置结果处理
        mQR.setResultHandler(this);

        //开始读取二维码

    }





    /**
     * 扫描二维码方法大全(已知)
     *
     * mQR.startCamera();               开启预览,但是并未开始识别
     * mQR.stopCamera();                停止预览,并且隐藏扫描框
     * mQR.startSpot();                 开始识别二维码
     * mQR.stopSpot();                  停止识别
     * mQR.startSpotAndShowRect();      开始识别并显示扫描框
     * mQR.stopSpotAndHiddenRect();     停止识别并隐藏扫描框
     * mQR.showScanRect();              显示扫描框
     * mQR.hiddenScanRect();            隐藏扫描框
     * mQR.openFlashlight();            开启闪光灯
     * mQR.closeFlashlight();           关闭闪光灯
     *
     * mQR.startSpotDelay(ms)           延迟ms毫秒后开始识别
     */

    /**
     * 扫描二维码成功
     * @param result
     */
    @Override
    public void onScanQRCodeSuccess(String result) {

        Toast.makeText(ScanActivity.this, result, Toast.LENGTH_SHORT).show();
        //震动
        vibrate();
        //停止预览
        mQR.stopCamera();

    }

    /**
     * 打开相机出错
     */
    @Override
    public void onScanQRCodeOpenCameraError() {
        Toast.makeText(ScanActivity.this, "打开相机出错!请检查是否开启权限!", Toast.LENGTH_SHORT).show();
    }

    /**
     * 震动
     */
    private void vibrate() {
        Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
        vibrator.vibrate(200);
    }

    @Override
    protected void onStart() {
        super.onStart();

        //启动相机
        mQR.startCamera();
    }

    @Override
    protected void onStop() {
        mQR.stopCamera();
        super.onStop();
    }
}
 
 

猜你喜欢

转载自blog.csdn.net/yuejunfei/article/details/77115930