我有一个充气的视图,我可以在画布上绘制它,但似乎无法正确定位。
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);
但视图始终位于左上角。谁知道为什么?
答案 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会计算孩子的上边距和左边距