2

我正在为 Android 编写纸牌游戏,所以我有 40 张纸牌图像,有 4 种不同的密度,分布在 res/drawable-ldpi、hdpi、mdpi 和 xhdpi 中。

我已经在其成员中定义了我的 Card 类,其中包含一个 Rect 区域,我将为每张卡片打印不同的图像。代码是:

package Maze;

import android.R;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;

public class Card {
    private CardNumber number;
    private CardSuit suit;
    private Rect region;
    private boolean visible;
    private Bitmap bitmap;
    private Bitmap backsideImg;

    public Card(CardNumber number, CardSuit suit){
        this.number = number;
        this.suit = suit;
        this.visible = false;
        region = new Rect();
        setBitmap();
    }

    private void setBitmap(){
        backsideImg = BitmapFactory.decodeFile(R.drawable.reverse);
        if(suit==CardSuit.HEARTS){
            switch(number){
            case ONE:
                bitmap = BitmapFactory.decodeFile(R.drawable.onehearts); // For onehearts.png file
                break;
            case TWO:
                bitmap = BitmapFactory.decodeFile(R.drawable.twohearts); // For twohearts.png file
                break;
            case THREE:
                bitmap = BitmapFactory.decodeFile(R.drawable.threehearts);
                break;
            case CUATRO:
                bitmap = BitmapFactory.decodeFile(R.drawable.fourhearts);
                break;
            // And so on...

            }
        }

    }

    public void draw(Canvas c, int x, int y){
        region.left = x;
        region.top = y;
        region.right = x + 80;
        region.bottom = y + 115;

        if(visible) c.drawBitmap(bitmap, x, y, null);
        else c.drawBitmap(backsideImg, x, y, null);

    }
}

但它没有找到资源。例如,它说“1hearts 无法解决或不是一个字段”。我想我错过了一些步骤,我只是将图像拖放到资源文件夹中。

我错过了什么?

4

2 回答 2

2

将文件名重命名为以字母开头。自动生成的R.drawable字段名称与您的文件名相同,但必须是有效的 Java 标识符。

编辑:

另外,请检查您是否包含正确的R课程。您可能希望使用 的完整内容更新您的问题Card.java,而不仅仅是课程代码。

编辑2:

正如我所怀疑的,您正在导入android.R系统资源类。您应该改用R从您的资源生成的类。鉴于您的包名称,我希望它是Maze.R.

于 2013-02-05T19:23:02.687 回答
1

您需要使用 decodeResource 而不是 decodeFile

就像是:

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.oneOfHearts);
于 2013-02-05T19:55:43.637 回答