Johnny
Johnny

Reputation: 2910

Android: Draw a view on canvas

I have a view inflated, I can draw it on canvas, but can't seem to position it properly.

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);

But the view is always at the top left corner. Anyone know why?

Upvotes: 6

Views: 19029

Answers (4)

Jiang Qi
Jiang Qi

Reputation: 4448

use drawChild(canvas,child,getDrawingTime()); instead of child.draw(canvas)

drawChild will calc child's top and left margin

Upvotes: -1

Peterdk
Peterdk

Reputation: 16005

Solution is to translate canvas:

canvas.save();
canvas.translate(left, top);            
view.draw(canvas);
canvas.restore();

Upvotes: 14

Lawrence D'Oliveiro
Lawrence D'Oliveiro

Reputation: 2774

Each View draws its contents within its own coordinate system, with (0, 0) at the top-left. If you want it to appear elsewhere, you can set a new transformation matrix on your Canvas.

Upvotes: 3

confucius
confucius

Reputation: 13327

because the coordinate system used in the Canvas starts from the top left corner instead of doing that define your Custom View and override the onDraw() method and inside it position your view as you like

Upvotes: 1

Related Questions