我们目前用的是谷歌的zxing来生成二维码;下面呢我分别为大家介绍一下简单的二维码,中间有log的二维码,和彩色二维码;
需要两个权限;
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.VIBRATE"/>
简单的二维码
首先你点击的按钮去扫一扫二维码
main.xml,这个页面可以自定义
<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:gravity="center_horizontal"
android:orientation="vertical"
tools:context=".MainActivity" >
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="Create2QR"
android:text="生成二维码" />
<EditText
android:id="@+id/ednaem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入要生成的文字" />
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
camera.xml;直接沾
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<SurfaceView
android:id="@+id/preview_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
<com.zxing.view.ViewfinderView
android:id="@+id/viewfinder_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:background="#b0e0e6"
android:gravity="center"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:text="开始扫描"
android:textColor="@android:color/white"
android:textSize="24sp"
android:textStyle="bold" />
<Button
android:id="@+id/openLight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
android:layout_centerHorizontal="true"
android:text="开启闪光灯"
android:textColor="@android:color/white"
android:onClick="IfOpenLight"
android:background="#00000000"
android:textSize="16sp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_below="@id/openLight"
android:layout_centerHorizontal="true"
android:text="从相册中选取照片"
android:textColor="@android:color/white"
android:onClick="pickPictureFromAblum"
android:background="#00000000"
android:textSize="16sp"/>
<Button
android:id="@+id/btn_cancel_scan"
android:layout_width="200dp"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:layout_marginBottom="75dp"
android:background="#FFA500"
android:text="取 消"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>
</FrameLayout>
Mainactivity.java
package com.exaple.day09rikao;
import com.google.zxing.WriterException;
import com.zxing.zxingframe.BitmapUtil;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ImageView image;
private EditText edname;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.image);
edname = (EditText) findViewById(R.id.ednaem);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
// 鐢熸垚浜岀淮鐮�
public void Create2QR(View v) {
String uri = edname.getText().toString();
// Bitmap bitmap = BitmapUtil.create2DCoderBitmap(uri, mScreenWidth/2,
// mScreenWidth/2);
Bitmap bitmap;
try {
bitmap = BitmapUtil.createQRCode(uri, 400);
//鐢熸垚浜岀淮鐮乴og
//bitmap = addLogo(bitmap, BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.ke));
if (bitmap != null) {
image.setImageBitmap(bitmap);
}
} catch (WriterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 鍦ㄤ簩缁寸爜涓�棿娣诲姞Logo鍥炬�
*/
private static Bitmap addLogo(Bitmap src, Bitmap logo) {
if (src == null) {
return null;
}
if (logo == null) {
return src;
}
//鑾峰彇鍥剧墖鐨勫�楂�
int srcWidth = src.getWidth();
int srcHeight = src.getHeight();
int logoWidth = logo.getWidth();
int logoHeight = logo.getHeight();
if (srcWidth == 0 || srcHeight == 0) {
return null;
}
if (logoWidth == 0 || logoHeight == 0) {
return src;
}
//logo澶у皬涓轰簩缁寸爜鏁翠綋澶у皬鐨�/5
float scaleFactor = srcWidth * 1.0f / 5 / logoWidth;
Bitmap bitmap = Bitmap.createBitmap(srcWidth, srcHeight, Bitmap.Config.ARGB_8888);
try {
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(src, 0, 0, null);
canvas.scale(scaleFactor, scaleFactor, srcWidth / 2, srcHeight / 2);
canvas.drawBitmap(logo, (srcWidth - logoWidth) / 2, (srcHeight - logoHeight) / 2, null);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
} catch (Exception e) {
bitmap = null;
e.getStackTrace();
}
return bitmap;
}
}