为什么我不能创建重复的图像并将它们放入我的应用程序的ImageView中?

时间:2016-07-10 16:53:42

标签: java android android-imageview android-canvas android-image

我在Android开发方面绝对是新手,我对此有疑问。

我必须将彼此相邻的图像绘制到Canvas对象中。

那么让我举一个例子来说明我的需要:

在我的项目的 / res / drawable / 文件夹中,我有这个图标(我已将其重新调整大小,然后将其放入我的项目中,但我认为这不是那么重要):

enter image description here

所以我必须将这些图标中的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 中。

为什么呢?怎么了?我错过了什么?我该如何尝试解决这个问题?

1 个答案:

答案 0 :(得分:1)

XML不能包含大写字母。将您的ID行切换到:

android:id="@+id/star_container"

然后将您的java文件引用更改为匹配。