第一次问这里。 我是Android Studio的新手,我正忙于其中创建一个应用程序,该应用程序将扫描包含Base64编码图像(以Base64字符串形式)的QR码。然后将需要对该字符串进行解码,并且必须显示结果图像。我想我已经使用以下方法正确地进行了解码:
byte[] imageBytes = Base64.decode(result.getContents(), Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(imageBytes, 0,imageBytes.length);
其中“ result.getContents()”将返回将被转换的Base64字符串。
让我烦恼的部分然后使用ImageView和XML进行显示。我目前有这个:
ImageView image = (ImageView) findViewById(R.id.image);
image.setImageBitmap(decodedByte);
我对应该如何使用XML显示该图像感到有些困惑,因为我了解“ findViewById(R.id.image);”中的“图像”是XML图像ID。我看过的所有示例都涉及显示可绘制的静态图像,但我想显示的图像会根据我解码的Base64字符串而变化。我刚刚开始学习XML,并且我了解用于可绘制图片的常见ImageView代码块将如下所示:
<ImageView
android:id="@+id/x2"
android:src="@drawable/book"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
我的问题是我该如何更改它才能显示已解码的图像。
答案 0 :(得分:1)
您在XML中的ImageView具有与您要设置的ID不同的ID。如下所示将findViewById更改为x2
ImageView image = (ImageView) findViewById(R.id.x2);
image.setImageBitmap(decodedByte);
答案 1 :(得分:0)
加载时,XML基本上会创建Java视图对象,因此您的imageview基本上是图像的容器。当将字符串解码为位图并将位图设置为imageview时,就是在告诉JVM反映对图像所做的任何更改以反映在imageview中。因此,您不需要在XML中添加任何代码即可做到这一点。
答案 2 :(得分:0)
动态设置ImageView
的图像是通过以编程方式进行的,这意味着它不是通过XML而是通过Java代码完成的。
因此,在您的情况下,XML部分用于安排您的内容,包括<ImageView>
。要将其访问您的Activity
类,请为此<ImageView>
提供一个ID。 (在您的情况下,可以通过设置android:id=@+id/x2
属性来完成。您猜对了,因此<ImageView>
的ID为x2
。
要设置此<ImageView>
的图像,您需要首先访问它。这就是为什么您需要findViewById()
。因此,要设置图片,请通过
ImageView image = (ImageView) findViewById(R.id.x2);
现在有了它,然后只需设置图像
image.setImageBitmap(decodedByte);