生成 掃描 二維碼

依賴
implementation ‘cn.bingoogolapple:bga-qrcode-zxing:1.3.4’

佈局

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".QrCodeActivity">
    <EditText
        android:layout_margin="20dp"
        android:id="@+id/qr"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/click"
        android:layout_margin="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="生成帶logo二維碼"/>
    <Button
        android:id="@+id/no_logo"
        android:layout_margin="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="生成不帶logo二維碼"/>
    <Button
        android:id="@+id/sm"
        android:layout_margin="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="掃描二維碼"/>
        <ImageView
            android:id="@+id/make_qr"
            android:layout_gravity="center"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_margin="20dp"/>

        <cn.bingoogolapple.qrcode.zxing.ZXingView
            android:id="@+id/zxing"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

</LinearLayout>

Activity

package com.example.day20rk;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import cn.bingoogolapple.qrcode.core.BGAQRCodeUtil;
import cn.bingoogolapple.qrcode.core.QRCodeView;
import cn.bingoogolapple.qrcode.zxing.QRCodeEncoder;
import cn.bingoogolapple.qrcode.zxing.ZXingView;

// TODO: 2018/12/20
public class QrCodeActivity extends AppCompatActivity implements QRCodeView.Delegate {
private EditText qr;
private Button click;
private ImageView make_qr;
private Button sm;
private ZXingView zxing;
private Button no_logo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_qr_code);
    qr = findViewById(R.id.qr);
    click = findViewById(R.id.click);
    make_qr = findViewById(R.id.make_qr);
    sm = findViewById(R.id.sm);
    zxing = findViewById(R.id.zxing);
    no_logo = findViewById(R.id.no_logo);
    sm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            initZingView();
        }
    });
    click.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onCreateQrCode();
        }
    });
    no_logo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new AsyncTask<String, Integer, Bitmap>() {
                @Override
                protected Bitmap doInBackground(String... strings) {
                    String QrContent = qr.getText().toString().trim();
                    return QRCodeEncoder.syncEncodeQRCode(QrContent,150);
                }

                @Override
                protected void onPostExecute(Bitmap bitmap) {
                    super.onPostExecute(bitmap);
                    make_qr.setImageBitmap(bitmap);
                }
            }.execute();
        }
    });

}

private void onCreateQrCode() {
    new AsyncTask<String, Integer, Bitmap>() {
        @Override
        protected Bitmap doInBackground(String... strings) {
            String QrContent = qr.getText().toString().trim();
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
            return QRCodeEncoder.syncEncodeQRCode(QrContent,BGAQRCodeUtil.dp2px(QrCodeActivity.this,150),Color.BLACK,bitmap);
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if(bitmap!=null){
                make_qr.setImageBitmap(bitmap);
            }else {
                Toast.makeText(QrCodeActivity.this, "生成二維碼失敗", Toast.LENGTH_SHORT).show();
            }
        }
    }.execute();
}

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

}

private void initZingView() {
    //設置掃描二維碼的代理
    zxing.setDelegate(this);
    //顯示掃描框
    zxing.showScanRect();
    //打開攝像頭
    zxing.startCamera();
    //延遲delay毫秒後開始識別
    zxing.startSpotDelay(100);
}

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

@Override
protected void onDestroy() {
    super.onDestroy();
    zxing.onDestroy();
}

@Override
public void onScanQRCodeSuccess(String result) {

}

@Override
public void onCameraAmbientBrightnessChanged(boolean isDark) {

}

@Override
public void onScanQRCodeOpenCameraError() {

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章