编码示例
package com.wolf_pan.qrcodesample; import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout; import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter; import java.util.HashMap; public class EncodingSampleActivity extends AppCompatActivity {
private LinearLayout encodingSampleLinearLayout;
private EditText textToEncodeEditText;
private ImageView encodedImageView;
private final String tag = "EncodingSampleActivity"; @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_encoding_sample);
encodingSampleLinearLayout = findViewById(R.id.encodingSampleLinearLayout);
textToEncodeEditText = findViewById(R.id.textToEncodeEditText);
encodedImageView = findViewById(R.id.encodedImageView);
findViewById(R.id.encodeButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String contents = textToEncodeEditText.getText().toString();
if (contents.isEmpty())
contents = "在此输入要编码的文本";
try {
int width = encodingSampleLinearLayout.getWidth() - 50, height = width;
HashMap<EncodeHintType, String> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix bitMatrix = new QRCodeWriter().encode(contents, BarcodeFormat.QR_CODE, width, height, hints);
int[] colors = new int[width * height];
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x)
colors[width * y + x] = bitMatrix.get(x, y) ? Color.RED : Color.WHITE;
}
Bitmap qrcodeBitmap = Bitmap.createBitmap(colors, width, height, Bitmap.Config.RGB_565);
encodedImageView.setImageBitmap(qrcodeBitmap);
} catch (WriterException ex) {
Log.e(tag, "ex: " + ex);
}
}
});
}
}
解码示例
package com.wolf_pan.qrcodesample; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView; import com.google.zxing.BinaryBitmap;
import com.google.zxing.RGBLuminanceSource;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader; import java.io.IOException; public class DecodingSampleActivity extends AppCompatActivity {
private ImageView qrcodeToDecodeImageView;
private TextView decodedTextView;
private Bitmap bitmap;
private final String tag = "DecodingSampleActivity"; @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_decoding_sample);
qrcodeToDecodeImageView = findViewById(R.id.qrcodeToDecodeImageView);
decodedTextView = findViewById(R.id.decodedTextView);
findViewById(R.id.decodeButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
int width = bitmap.getWidth(), height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
String decoded = new QRCodeReader().decode(new BinaryBitmap(new HybridBinarizer(new RGBLuminanceSource(width, height, pixels)))).getText();
decodedTextView.setText(decoded);
} catch (Exception ex) {
Log.e(tag, "ex: " + ex);
}
}
});
try {
bitmap = BitmapFactory.decodeStream(getAssets().open("qrcode_qq.png"));
qrcodeToDecodeImageView.setImageBitmap(bitmap);
} catch (IOException ex) {
Log.e(tag, "ex: " + ex);
}
}
}