绘制位图而不是Rect

时间:2012-04-02 13:25:08

标签: android bitmap android-canvas draw

Andriod我有这个代码:

public Tank(int color) {
    bounds = new RectF();
    paint = new Paint();
    paint.setColor(color);
}

public void draw(Canvas canvas) {
    bounds.set(x - radius, y - radius, x + radius, y + radius);
    canvas.drawRect(bounds, paint);
}

我正在绘制一个Rect,但现在我想绘制一个Bitmap而不是一个Rect,但是

bitTank = BitmapFactory.decodeRescource(getRescource(),R.drawable.ic_launcher);

bitTank = BitmapFactory.decodeFile("C:\Users\...\res\drawable-hdpi\ic_launcher.png");

(两者)与

结合使用
canvas.drawBitmap(bitTank, matrix, null);

无效。

第一个不知道getRescource(),而第二个不再知道{{1}}。我怎么能意识到这一点? (代码在Tank类中,另一个类调用draw函数)。

2 个答案:

答案 0 :(得分:1)

第二个版本根本无法使用,因为您尝试从Android应用内部访问PC上的文件。 Android对您的本地PC一无所知。

使用第一个代码,您需要一个Context实例来访问资源。您可以将上下文传递给构造函数,然后使用它:

class Tank {
    Context context;
    ...

    public Tank(int color, Context ctx) {
        context = ctx;

        bounds = new RectF();
        paint = new Paint();
        paint.setColor(color);
    }

    public void draw(Canvas canvas) {
        ...
        bitTank = BitmapFactory.decodeRescource(context.getRescources(),R.drawable.ic_launcher);
        ...
    }
}

虽然这不是实现目标的唯一途径,但它应该让你开始。

答案 1 :(得分:0)

最后是getResources()并带有's' 还要确保您有一个上下文来获取资源。如果您在Tank课程中进行调用,则需要以另一种方式访问​​上下文,如果YourActivity.thisTank是内部类活动,则需要以public Tank(Context ctx, int color) { bitmap = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.ic_launcher); //... other loading } 方式访问上下文,或者将其传递给否则构造函数:

{{1}}