2017-09-06 88 views
0

我对android开发相对较新,至今我还没有拿起碎片的目的。无论如何,我正在尝试为创建一个唯一的QR码,以便每位登录到我的应用的用户登录。这个QR码是,用户信息我从数据库中检索到。现在我遇到的唯一的问题是是上述qr代码的产生。我浏览了几十个教程,但通常它们对我的用例来说是无效的,或者我不能简单地让它们工作。我也浏览了ZXING api,但那没有帮助。我请求StackoverFlow社区帮助这个努力,所有帮助表示赞赏如何使用碎片为Android创建QR码生成器

回答

0

Activity和Fragment之间的使用略有不同。他们都可以用来显示用户界面。要使用片段,您需要将“活动”作为其宿主,因为片段必须始终嵌入活动中。

documentation

甲片段表示行为或在 活动的用户界面的一部分。您可以在单个活动中合并多个片段到 构建多窗格用户界面并在多个活动中重复使用片段。您可以将某个片段视为活动的模块化部分,该活动在其自身的生命周期中拥有 ,接收自己的输入事件,并且可以在活动运行时添加或删除哪些内容(有点像“sub ”活动“你可以在不同的活动中重复使用)。

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

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

  1. 创建活动作为东道主
  2. 创建活动的布局。在其中,您需要创建一个FrameLayout视图作为片段持有者。
  3. 通过延伸片段类
  4. 为片段
  5. 创建UI布局通过使用FragmentTransaction

现在创建QR码部分附上片段到活动创建片段。您需要确定需要在QR码中显示哪些信息。不要在QR码中提供所有信息,因为您不能将所有用户数据公开给全世界。如果您有超过1个字符串的信息,您可以使用“;”或其他任何加入文本信息。

要构建QR码图像,首先,您需要在应用程序构建中使用以下行包含ZXing library。gradle这个(使用latest version):

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

然后用下面的代码创建的QR码位图:

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; 
} 
+0

它的工作,你是一个救世主。感谢您的全力帮助 – saj5211

+0

非常欢迎。你可以接受这个答案,然后关闭这个问题;) –