Android:在画布上绘制视图

时间:2012-02-09 02:18:11

标签: android android-layout android-canvas

我有一个充气的视图,我可以在画布上绘制它,但似乎无法正确定位。

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 个答案:

答案 0 :(得分:10)

解决方案是翻译画布:

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

答案 1 :(得分:1)

因为Canvas中使用的坐标系从左上角开始,而不是这样定义自定义视图并覆盖onDraw()方法,并在其内部根据需要定位视图

答案 2 :(得分:1)

每个视图在其自己的坐标系中绘制其内容,左上角为(0,0)。如果您希望它出现在其他地方,您可以在Canvas上设置新的transformation matrix

答案 3 :(得分:0)

使用drawChild(canvas,child,getDrawingTime());而不是child.draw(画布)

drawChild会计算孩子的上边距和左边距