您的位置:首页 > 移动开发 > Android开发

android常见二维码,普通二维码,带Logo的二维码

2017-09-08 14:11 113 查看
首先需要继承zxing.jar的依赖库,自行下载.
在布局中添加了两个按钮,和一个ImageView,通过点击事件生成不同的二维码显示在ImageView上
public class MainActivity extends AppCompatActivity {private ImageView img;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);img = (ImageView) findViewById(R.id.image);}//创建普通的二维码public void createQR0(View view) {Bitmap bitmap = generateBitmap("http://www.baidu.com", 500, 500);img.setImageBitmap(bitmap);}//创建中心带Logo(图标)的二维码public void createQR0AndLogo(View view) {Bitmap bitmap = generateBitmap("http://blog.csdn.net/billy_zuo/article/details/53505108", 500, 500);//图片需要使用BitmapFactory格式工厂转换成BitMap格式的,图片自定义Bitmap bitmap1 = addLogo(bitmap, BitmapFactory.decodeResource(getResources(), R.mipmap.am8));img.setImageBitmap(bitmap1);}
	//以下代码建议直接复制,是从zxing中复制过来的./*** 生成二维码* 参数一 需要显示的内容* 参数二和三  二维码的宽和高*/private Bitmap generateBitmap(String content, int width, int height) {QRCodeWriter qrCodeWriter = new QRCodeWriter();Map<EncodeHintType, String> hints = new HashMap<>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");try {BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, width, height);int[] pixels = new int[width * height];for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {if (encode.get(j, i)) {pixels[i * width + j] = 0x00000000;} else {pixels[i * width + j] = 0xffffffff;}}}return Bitmap.createBitmap(pixels, 0, width, width, height, Bitmap.Config.RGB_565);} catch (WriterException e) {e.printStackTrace();}return null;}/*** 给二维码图片加背景*/public static Bitmap addBackground(Bitmap foreground, Bitmap background) {int bgWidth = background.getWidth();int bgHeight = background.getHeight();int fgWidth = foreground.getWidth();int fgHeight = foreground.getHeight();Bitmap newmap = Bitmap.createBitmap(bgWidth, bgHeight, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(newmap);canvas.drawBitmap(background, 0, 0, null);canvas.drawBitmap(foreground, (bgWidth - fgWidth) / 2,(bgHeight - fgHeight) * 3 / 5 + 70, null);canvas.save(Canvas.ALL_SAVE_FLAG);canvas.restore();return newmap;}/*** 添加图标** @param qrBitmap* @param logoBitmap* @return*/private Bitmap addLogo(Bitmap qrBitmap, Bitmap logoBitmap) {int qrBitmapWidth = qrBitmap.getWidth();int qrBitmapHeight = qrBitmap.getHeight();int logoBitmapWidth = logoBitmap.getWidth();int logoBitmapHeight = logoBitmap.getHeight();Bitmap blankBitmap = Bitmap.createBitmap(qrBitmapWidth, qrBitmapHeight, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(blankBitmap);canvas.drawBitmap(qrBitmap, 0, 0, null);canvas.save(Canvas.ALL_SAVE_FLAG);float scaleSize = 1.0f;while ((logoBitmapWidth / scaleSize) > (qrBitmapWidth / 5) || (logoBitmapHeight / scaleSize) > (qrBitmapHeight / 5)) {scaleSize *= 2;}float sx = 1.0f / scaleSize;canvas.scale(sx, sx, qrBitmapWidth / 2, qrBitmapHeight / 2);canvas.drawBitmap(logoBitmap, (qrBitmapWidth - logoBitmapWidth) / 2, (qrBitmapHeight - logoBitmapHeight) / 2, null);canvas.restore();return blankBitmap;}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: