试图修改简单的Android形状教程来使用图像,遇到麻烦

时间:2011-09-01 14:06:07

标签: android

我遵循以下教程:

http://www3.ntu.edu.sg/home/ehchua/programming/android/Android_2D.html

在其中,

Canvas canvas.drawOval();
调用

以便绘制一个默认圆圈,然后反弹。我学习新图形框架的常用方法是在此基础上构建,然后升级到图像。通常情况下,这很简单,但我在这里遇到了麻烦。对于drawOval命令(我更习惯)没有等效的“drawImage”。

相反,我试图找出“可绘制的”。

所以,在另一个教程(特别是默认的Android“蛇”游戏)之后,我尝试了:

Resources r = this.getContext().getResources();

在我看来,然后将资源对象传递给我的ball对象,得到:

img = r.getDrawable(R.drawable.ball);

其中ball是存储在/res/drawable/ball.png

中的文件

在球对象绘制方法(我在视图的onDraw方法中调用)中,我有:

img.draw(canvas);

canvas从onDraw传递,它本身传递了一个画布。我真的不明白谁在调用onDraw(我假设一些内部过程),但这与他们制作自己的画布的蛇示例不同?

无论哪种方式,这似乎都不起作用。我没有得到任何图像或任何错误。我知道img至少是填充的(它不是空的或任何东西),但除此之外,我真的不知道该怎么做......

如果这是Ruby(我最熟悉的语言),我会调用img来检查它是否真的有任何东西...是否有Java的等价物(或者我应该愚弄断点)?

有什么明显的我做错了吗?我可以不使用我正在传递的默认画布,即使我显然可以绘制简单的形状吗?

1 个答案:

答案 0 :(得分:0)

啊,我想通了:

使用draw oval方法,我需要像这样设置边界:

RectF bounds.set(ballX-ballRadius, ballY-ballRadius, ballX+ballRadius, ballY+ballRadius);

但是对于可绘制对象,我必须更进一步说出

img.setBounds(bounds); 

并使边界成为Rect而不是RectF。

一旦完成,瞧,事情正在呈现。

起初我没有想到,界限就是事物知道在哪里渲染自己,并且当你将界限传递给椭圆时,你必须将它们设置为可绘制的。