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函数)。
答案 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.this
是Tank
是内部类活动,则需要以public Tank(Context ctx, int color) {
bitmap = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.ic_launcher);
//... other loading
}
方式访问上下文,或者将其传递给否则构造函数:
{{1}}