我在Android开发方面绝对是新手,我对此有疑问。
我必须将彼此相邻的图像绘制到Canvas对象中。
那么让我举一个例子来说明我的需要:
在我的项目的 / res / drawable / 文件夹中,我有这个图标(我已将其重新调整大小,然后将其放入我的项目中,但我认为这不是那么重要):
所以我必须将这些图标中的3个彼此相邻放入我的活动视图的特定 ImageView 中(在图像和下一个图像之间添加一些空白区域)。
所以我做了类似的事情:
1)这是我的 fragment_screen_slide.xml 文件的代码,代表必须放置这些图片的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="0dp">
<ImageView
android:id="@+id/imageView1"
android:layout_width="fill_parent"
android:scaleType="fitXY"
android:layout_height="250dp" />
<TextView android:id="@android:id/text1"
style="@style/pastaTitleTextStyle" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0px"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
style="@style/HeaderTextStyle"
android:text="Difficoltà:" />
<ImageView
android:id="@+id/starContainer"
android:layout_width="fill_parent"
android:scaleType="fitXY"
android:layout_height="250dp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
特别是这些图片必须放在上一个代码段中包含的 ImageView 中:
<ImageView
android:id="@+id/starContainer"
android:layout_width="fill_parent"
android:scaleType="fitXY"
android:layout_height="250dp" />
我首先怀疑是因为Androi Studio报告了这一行的错误:
android:id="@+id/starContainer"
报告的错误是 @ 上的红色下划线,当我在其上传递鼠标指针时,我可以阅读以下错误消息:
<interface declaration>, <perceable declaration>, AidToken.import or AidTokenTye.package expected, got '@'
对我来说这似乎很奇怪,因为我只是 ImageView 的id,因为Gradle构建项目时我没有问题。
然后,在实际将图像放入上一个 ImageView 的Java代码中,我做了类似的事情:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println("PAGE NUMBER: "+ mPageNumber + 1);
// Create the Canvas where the images are putted:
Canvas difficultyCanvas = creaImgDifficulty();
switch (mPageNumber + 1) {
case 1:
imgSlideView.setImageResource(R.drawable.carbonara);
((TextView) rootView.findViewById(android.R.id.text1)).setText(getString(R.string.carbonara));
difficultyCanvas = creaImgDifficulty();
ImageView starContainer = (ImageView) rootView.findViewById(R.id.starContainer);
starContainer.draw(difficultyCanvas);
break;
// OTHER CASES
}
private Canvas creaImgDifficulty() {
Canvas canvas;
Bitmap chefHatOk = BitmapFactory.decodeResource(getResources(), R.star);
Bitmap output = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
canvas = new Canvas(output);
int space = 10; // the space between images
for(int i = 0; i < 3; i++) {
canvas.drawBitmap(chefHatOk, i * (chefHatOk.getWidth() + space), 0, null);
}
return canvas;
}
}
因此,正如您在前面的代码片段中所看到的,首先创建视图时,我创建一个新的 Canvas 对象(包含重复的图像),调用 creaImgDifficulty()< / strong>然后我尝试将此 Canvas 对象绘制到之前的 ImageView id = starContainer 。
creaImgDifficulty()创建 Canvas 对象并在其上绘制3次位图。
运行应用程序时没有出现错误,但图像未显示在 ImageView 中。
为什么呢?怎么了?我错过了什么?我该如何尝试解决这个问题?
答案 0 :(得分:1)
XML不能包含大写字母。将您的ID行切换到:
android:id="@+id/star_container"
然后将您的java文件引用更改为匹配。