Android: нарисуйте вид на холсте - PullRequest
4 голосов
/ 09 февраля 2012

У меня завышен вид, я могу нарисовать его на холсте, но не могу правильно расположить его.

LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = li.inflate(R.layout.fix_this_recommendation, null);
v.measure(MeasureSpec.getSize(v.getMeasuredWidth()), MeasureSpec.getSize(v.getMeasuredHeight()));
v.layout(400, 400, 400, 400);
v.draw(canvas);

Но вид всегда в верхнем левом углу. Кто-нибудь знает почему?

Ответы [ 4 ]

11 голосов
/ 29 октября 2013

Решение заключается в переводе холста:

canvas.save();
canvas.translate(left, top);            
view.draw(canvas);
canvas.restore();
2 голосов
/ 09 февраля 2012

Каждый просмотр рисует свое содержимое в своей собственной системе координат, с (0, 0) в верхнем левом углу. Если вы хотите, чтобы он появился в другом месте, вы можете установить новую матрицу преобразования на вашем Canvas.

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

потому что система координат, используемая в Canvas, начинается с верхнего левого угла, а не определяет ваш пользовательский вид и переопределяет метод onDraw(), а внутри него позиционирует вид как вам нравится

0 голосов
/ 07 января 2014

use drawChild (canvas, child, getDrawingTime ()); вместо child.draw (canvas)

drawChild вычислит верхний и левый поля дочернего элемента

...