我遵循以下教程:
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的等价物(或者我应该愚弄断点)?
有什么明显的我做错了吗?我可以不使用我正在传递的默认画布,即使我显然可以绘制简单的形状吗?
答案 0 :(得分:0)
使用draw oval方法,我需要像这样设置边界:
RectF bounds.set(ballX-ballRadius, ballY-ballRadius, ballX+ballRadius, ballY+ballRadius);
但是对于可绘制对象,我必须更进一步说出
img.setBounds(bounds);
并使边界成为Rect而不是RectF。
一旦完成,瞧,事情正在呈现。
起初我没有想到,界限就是事物知道在哪里渲染自己,并且当你将界限传递给椭圆时,你必须将它们设置为可绘制的。