代码之家  ›  专栏  ›  技术社区  ›  saj5211

如何使用片段为Android创建二维码生成器

  •  4
  • saj5211  · 技术社区  · 7 年前

    创建唯一的二维码 我从数据库中检索到的。现在唯一 我遇到的问题是所述二维码的生成 . 我已经阅读了几十篇教程,但它们往往对我的用例无效,或者我不能简单地让它们工作。我还查看了 感谢所有帮助

    3 回复  |  直到 7 年前
        1
  •  16
  •   ישו אוהב אותך Mahavir    7 年前

    活动和片段之间的用法略有不同。它们都可以用于显示UI。要使用片段,您需要将活动作为其宿主,因为片段必须始终嵌入到活动中。

    documentation :

    活动您可以在单个活动中组合多个片段以 构建多窗格UI并在多个活动中重用片段。你 它自己的生命周期,接收自己的输入事件,您可以 在活动运行时添加或删除(有点像“子

    片段必须始终嵌入到活动中 而碎片的 生命周期直接受到主机活动生命周期的影响。

    你需要阅读 Building a Dynamic UI with Fragments 掌握片段。创建片段的步骤(注意,这不是一条严格的规则):

    1. 通过扩展Fragment类创建片段
    2. 为片段创建UI布局

    现在是创建二维码部分。您需要确定需要在二维码中显示哪些信息。不要给出二维码中的所有信息,因为你不能将你的所有用户数据公开给全世界。如果您有一个以上的信息字符串,可以使用“;”或任何其他加入文本信息的内容。

    要构建二维码图像,首先需要包括 ZXing library (使用 latest version ):

    compile 'com.google.zxing:core:3.3.0'
    

    private Bitmap textToImage(String text, int width, int height) throws WriterException, NullPointerException {
      BitMatrix bitMatrix;
      try {
        bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.DATA_MATRIX.QR_CODE, 
                       width, height, null);
      } catch (IllegalArgumentException Illegalargumentexception) {
        return null;
      }
    
      int bitMatrixWidth = bitMatrix.getWidth();
      int bitMatrixHeight = bitMatrix.getHeight();
      int[] pixels = new int[bitMatrixWidth * bitMatrixHeight];
    
      int colorWhite = 0xFFFFFFFF;
      int colorBlack = 0xFF000000;
    
      for (int y = 0; y < bitMatrixHeight; y++) {
        int offset = y * bitMatrixWidth;
        for (int x = 0; x < bitMatrixWidth; x++) {
          pixels[offset + x] = bitMatrix.get(x, y) ? colorBlack : colorWhite;
        }
      }
      Bitmap bitmap = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_4444);
    
      bitmap.setPixels(pixels, 0, width, 0, 0, bitMatrixWidth, bitMatrixHeight);
      return bitmap;
    }
    

    然后,您可以使用它将生成的图像设置为片段中的ImageView,如下所示:

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {
      View view = inflater.inflate(R.layout.your_fragment_layout, container, false);
      ImageView imvQrCode = (ImageView) view.findViewById(R.id.your_image_view);
    
      Bitmap bitmap = textToImage("your_text_info", 500, 500);
      imageView.setImageBitmap(bitmap);
    
      return view;
    }
    
        2
  •  0
  •   Hussain KMR Behestee    4 年前

    here 如何创建和使用片段。但为了生成二维码,我找到了一个非常小和智能的库 QRGen

    Bitmap myBitmap = QRCode.from("www.example.org").bitmap();
    ImageView myImage = (ImageView) findViewById(R.id.imageView);
    myImage.setImageBitmap(myBitmap);
    
        3
  •  -1
  •   Null Pointer Exception    6 年前
        try {
    Bitmap bitmap= encodeAsBitmap("Muhammad Qasim Android Developer", BarcodeFormat.QR_CODE, Width, Height);
    
                            if (bitmap!= null) {
                                img.setImageBitmap(bitmap);
                            }
                        } catch (WriterException e) {
    
                                Log.e(""+e,"Exception");
                        }