用帆布绘制人物并设定角度的最佳方法是什么?

时间:2012-02-20 20:53:37

标签: java android graphics custom-controls rotation

我在这里遇到了大麻烦。我需要在床上画一个洋娃娃(如在医疗床上),我似乎无法做到。我尝试创建自定义视图,然后我开始绘制。我使用了canvas.drawCirclecanvas.drawRect。我设法绘制这个玩偶,但我根据自定义视图的高度和宽度来确定它的大小,所以最后我无法设置角度。

然后,我尝试设置自定义xml属性(大小),然后包装其内容。但是wrap_content不起作用,它总是设置为全屏。所以我也不能使用它,因为我需要正确的头部位置来设置身体的其余部分。

我真正需要的是,绘制一些几何形状,然后单独操作它们。比如,用户选择移动腿部,然后当他按下向上按钮时,腿部将设置角度+1。我不知道这是否可以使用自定义视图,只有onDraw。我现在真的真的迷失了,拜托,至少有人指出我需要用来实现这一目标。

Picture

2 个答案:

答案 0 :(得分:2)

最好的方法是使用RenderScriptOpenGL

它为您提供最佳性能但很难实现。 Here是很好的教程,详细介绍了5章。

答案 1 :(得分:1)

绘制到画布时,您可以对要绘制的形状执行各种转换。

因此,如果你想首先旋转整个玩偶,你应该在玩偶之前进行转换。然后你可以转换该转变中的每个身体部位。 例如,有一条腿的玩偶。

//save the canvas transformation state
canvas.save();
   //first move the whole doll
   canvas.translate(dollPosition.x,dollposition.y);
   //we are now inside the coordinate system of the doll
   //draw head (Position is now relative to the center of the doll position)
   canvas.drawCircle(dollHeadPosition.x, dollHeadPosition.y, headRadius, paint);
   //save the canvas to transform leg independently
   canvas.save();
      canvas.translate(legPosition.x,legPosition.y);
      //draw leg
      canvas.drawRect(...);
      //restore the canvas to get back to your doll coordinate system
   canvas.restore()
//restore canvas to get to global coordinate system
canvas.restore()

有各种变换,如旋转和倾斜等。只需使用自动完成功能就可以了解它们的编写方式。

(我希望缩进说清楚,它是如何工作的)