繁体   English   中英

绘制位图而不是矩形

[英]Draw Bitmap instead of Rect

对于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() ,而第二个则不起作用。 我怎么能知道呢? (该代码位于Tank类中,另一个类称为draw函数)。

第二个版本根本无法工作,因为您正试图从内部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);
        ...
    }
}

虽然这不是实现目标的唯一途径,但它应该可以帮助您入门。

它是getResources() ,末尾带有“ s”。
还要确保您有一个上下文来获取资源。 如果您从Tank类中进行调用,则需要以其他方式访问上下文,例如YourActivity.this如果Tank是一个内部类,则为活动,否则将其传递给构造函数:

public Tank(Context ctx, int color) {
    bitmap = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.ic_launcher);
    //... other loading

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM