Android 二维码生成 带logo
来源:互联网 发布:app停车软件下载 编辑:程序博客网 时间:2024/05/22 01:31
首先需要下载 core-x.x.x.jar文件并依赖。
public class MainActivity extends AppCompatActivity { private ImageView ivQrCode; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ivQrCode = (ImageView) findViewById(R.id.iv_qr_code); findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { click(); } }); } private void click() { //生成二维码 Bitmap qrCodeBitmap = generateBitmap(MainActivity.this, "这里是二维码的内容", 100, 100); //生成二维码中需要显示的图标 Bitmap logoBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_round); //生成带图标的二维码 Bitmap qrCodeWithLogo = addLogo(qrCodeBitmap, logoBitmap); ivQrCode.setImageBitmap(qrCodeWithLogo); } //这个是生成二维码的Bitmap public Bitmap generateBitmap(Context context, String content, int widthDp, int heightDp) { int width = DensityUtils.dip2px(context, widthDp); int height = DensityUtils.dip2px(context, heightDp); 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, hints); 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 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; }}
DensityUtils类的代码内容是:
public class DensityUtils { private static final float DOT_FIVE = 0.5f; /** * dip to px * * @param context * @param dip * @return */ public static int dip2px(Context context, float dip) { float density = getDensity(context); return (int) (dip * density + DensityUtils.DOT_FIVE); } /** * px to dip * * @param context * @param px * @return */ public static int px2dip(Context context, float px) { float density = getDensity(context); return (int) (px / density + DOT_FIVE); } private static DisplayMetrics sDisplayMetrics; /** * get screen width * * @param context * @return */ public static int getDisplayWidth(Context context) { initDisplayMetrics(context); return sDisplayMetrics.widthPixels; } /** * get screen height * * @param context * @return */ public static int getDisplayHeight(Context context) { initDisplayMetrics(context); return sDisplayMetrics.heightPixels; } /** * get screen density * * @param context * @return */ public static float getDensity(Context context) { initDisplayMetrics(context); return sDisplayMetrics.density; } /** * get screen density dpi * * @param context * @return */ public static int getDensityDpi(Context context) { initDisplayMetrics(context); return sDisplayMetrics.densityDpi; } /** * init display metrics * * @param context */ private static synchronized void initDisplayMetrics(Context context) { sDisplayMetrics = context.getResources().getDisplayMetrics(); } /** * is landscape * * @param context * @return */ public static boolean isLandscape(Context context) { return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; } /** * is portrait * * @param context * @return */ public static boolean isPortrait(Context context) { return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT; } /** * get status height * * @param context * @return */ public static int getStatusHeight(Context context) { int statusHeight = -1; try { Class<?> clazz = Class.forName("com.android.internal.R$dimen"); Object object = clazz.newInstance(); int height = Integer.parseInt(clazz.getField("status_bar_height") .get(object).toString()); statusHeight = context.getResources().getDimensionPixelSize(height); } catch (Exception e) { e.printStackTrace(); } return statusHeight; }}
阅读全文
0 0
- Android 二维码生成 带logo
- android生成带logo的二维码
- 生成二维码(中间带logo) android
- Android 生成带logo的二维码
- Android 生成二维码 带LOGO的二维码 条形码
- android 带与不带logo的二维码生成
- php生成二维码带logo
- 生成带logo的二维码
- iOS二维码生成(带logo)
- iOS二维码生成(带logo)
- iOS二维码生成(带logo)
- 带logo的二维码生成
- zxing 二维码、带logo二维码生成
- ZXing生成条形码、二维码、带logo二维码
- Android生成带LOGO图片二维码的方法
- Android生成带LOGO图片二维码的方法
- Android生成带LOGO图片二维码的方法
- android二维码扫描、读取、识别、生成、带logo
- 从零学Java——异常处理机制
- OFFBOARD
- boost::coroutine2(stackful协程库)
- 数据结构-树的实现C++
- Java——SAX解析XML文件
- Android 二维码生成 带logo
- set&&map
- eclipse中 使用JPA Tools 根据数据库表自动生成实体类
- UR机器人TCP编程实践
- Java面向对象基本语法
- HttpClient 教程
- Sitemesh 3 配置
- Eclipse中SVN插件的安装与使用
- 孩子兄弟表示及遍历操作