2012-02-09 40 views
3

私はキャンバスに描画することができますが、適切に配置することはできません。Android:キャンバス上にビューを描画

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

ただし、ビューは常に左上隅にあります。誰でも知っている理由は?

答えて

1

等の左上隅からCanvas開始ではなく、あなたのカスタムビューを定義し、onDraw()メソッドをオーバーライドすることをやって、それの内部で使用される座標系では、あなたのビューを配置するので、それ自身の座標系で、左上に(0、0)が付きます。他の場所に表示したい場合は、キャンバスに新しいtransformation matrixを設定することができます。

+1

これは意味が分かりました。問題はサブビューが適切に描画されていないことでした。だから "レイアウト"は何をするのですか? – Johnny

+0

正確にこれを行う方法に関する情報はありますか?私は同じ問題に直面しています。 – Peterdk

1

各ビューは、内にその内容を描画します

+0

子供の上部と左マージンをカルクなり、上記のコードは、onDraw()関数内です。何か不足していますか? – Johnny

10

ソリューションは、キャンバスを翻訳することです:

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

使用drawChild(キャンバス、子供、getDrawingTime());代わりにchild.draw(キャンバス)

のdrawChildは、これは私がやっているものです

関連する問題