Как лучше всего рисовать фигуры с помощью холста и устанавливать их угол? - PullRequest
2 голосов
/ 21 февраля 2012

У меня большие проблемы здесь. Мне нужно нарисовать куклу в кровати (как в медицинской кровати), и я не могу этого сделать. Я попытался создать собственный вид, затем я начал рисовать. Я использовал canvas.drawCircle и canvas.drawRect. Мне удалось нарисовать эту куклу, но я основал ее размер на высоте и ширине пользовательского вида, так что в итоге я не смог установить углы.

Затем я попытался установить свой собственный атрибут xml (размер), а затем обернуть его содержимое. Но wrap_content не работал, он всегда устанавливался как полный экран. Поэтому я тоже не смог бы это использовать, потому что мне нужно правильное положение головы, чтобы настроить остальную часть тела.

Что мне точно нужно, так это нарисовать геометрические фигуры, а затем управлять ими по отдельности. Мол, пользователь решает переместить ногу, тогда, когда он нажимает кнопку вверх, нога установит угол +1. Я не знаю, возможно ли это с пользовательским View и только onDraw. Я действительно очень потерян, пожалуйста, кто-нибудь, по крайней мере, покажет мне, что мне нужно использовать для достижения этой цели.

Изображение

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Лучшим способом является использование RenderScript или OpenGL

. Это обеспечивает лучшую производительность, но ее трудно реализовать. Здесь - хороший учебник, в нем 5 глав.

1 голос
/ 21 февраля 2012

Рисуя на холсте, вы можете выполнять любые преобразования форм, которые хотите нарисовать.

Так что, если вы сначала хотите повернуть всю куклу, вы должны выполнить преобразование до того, как кукла будет нарисована. Затем вы можете трансформировать каждую часть тела в пределах этой трансформации. Например, кукла с одной ногой.

//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()

Есть все виды преобразований, такие как вращение и наклон и так далее. Просто используйте автозаполнение, чтобы узнать, как они написаны.

(надеюсь, отступ дает понять, как это работает)

...