版权声明:本文为博主原创文章,未经博主允许不得转载。https://mp.csdn.net/mdeditor/78065629#
我是一个安卓新手 第一次写博客今天项目里面有个需求,需要动态生成一个条形码,于是 我想到了Zxing 这个开源框架。废话不多说,现在先来看代码
这是布局文件
接下来是代码
public class MainActivity extends AppCompatActivity {
private EditText mEtInput;
private Button mBtOneCode;
private Button mBtTwoCode;
private ImageView mIvCode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
}
private void initListener() {
mBtTwoCode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String strs =mEtInput.getText().toString().trim();
Bitmap mBitmap=null;
Toast.makeText(getApplicationContext(),""+strs,Toast.LENGTH_LONG).show();
if(!"".equals(strs)&&strs!=null){
try{
mBitmap=CreateTwoDcode(strs);
}catch (WriterException e){
e.printStackTrace();
}
if (mBitmap!=null){
mIvCode.setImageBitmap(mBitmap);
}
}
}
});
mBtOneCode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String str =mEtInput.getText().toString().trim();
int size=str.length();
for (int i=0;i<size;i++){
int c=str.charAt(i);
if (19968<=c&&c<40523){
Toast.makeText(getApplicationContext(),"生成的条形码不能使中文",Toast.LENGTH_LONG).show();
return;
}
}
Bitmap bmp=null;
try{
if (!"".equals(str)&&str!=null){
bmp=CreateOneDcode(str);
}
}catch (WriterException e){
e.printStackTrace();
}
if (bmp!=null){
mIvCode.setImageBitmap(bmp);
}
}
});
}
public Bitmap CreateTwoDcode(String conternet)throws WriterException{
BitMatrix bitMatrix=new MultiFormatWriter().encode(conternet, BarcodeFormat.QR_CODE,300,300);
int width=bitMatrix.getWidth();
int height=bitMatrix.getHeight();
int[] pixels=new int[width*height];
for (int i=0;i<height;i++){
for (int j=0;j<width;j++){
if(bitMatrix.get(j,i)){
pixels[i*width+j]=0xff000000;
}
}
}
Bitmap bitmap=Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels,0,width,0,0,width,height);
return bitmap;
}
public Bitmap CreateOneDcode(String conternet)throws WriterException{
BitMatrix bitMatrix=new MultiFormatWriter().encode(conternet,BarcodeFormat.CODE_128,500,200);
int width=bitMatrix.getWidth();
int height=bitMatrix.getHeight();
int[] pixels=new int[width*height];
for (int y=0;y<height;y++){
for (int x=0;x<width;x++){
if (bitMatrix.get(x,y)){
pixels[y*width+x]=0xff000000;
}
}
}
Bitmap bitmap=Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels,0,width,0,0,width,height);
return bitmap;
}
private void initView() {
mEtInput= (EditText) findViewById(R.id.et_inputText);
mBtOneCode= (Button) findViewById(R.id.bt_one);
mBtTwoCode= (Button) findViewById(R.id.bt_two);
mIvCode= (ImageView) findViewById(R.id.iv_code);
}
}
其中的MultiFormatWriter(), BitMatrix 等 均为Zxing的方法
注意:Zxing 是不支持中文二维码的
最后附上效果图,即可以生成二维码,又可以生成条形码
亲测 可以扫,有结果,毕竟第一发博客,我是个新人还会继续努力,希望大神指点