2017-06-09 1 views
0

私はxamarinを使ってアンドロイドアプリを開発しています。 Regionクラスを使用しようとすると問題が発生します。コードの下では正常に動作し、期待される青色の領域が表示されます。地域のクラスはとてもよく分かりません

Rect rect1 = new Rect(0, 0, 10,10); 
canvas.ClipRect(rect1); 
Rect rect2 = new Rect(20, 20, 30,30); 
canvas.ClipRect(rect2, Region.Op.Union); 
canvas.DrawRect(0, 0, 40, 40, paint); 

しかし、コードの下に動作しない、ちょうど私がなぜ知らない何も、空白の背景

Region region = new Region(); 
Rect rect1 = new Rect(0, 0, 10,10); 
region.Union(rect1); 
Rect rect2 = new Rect(20, 20, 30,30); 
region.Union(rect2); 

canvas.ClipRegion(region); 
canvas.DrawRect(0, 0, 40, 40, paint); 

を示していません。

答えて

0

実際には動作しますが、ActionBarなどでブロックされている可能性があります。そのため、表示されず、動作しないと思われる場合はthisとなります。しかし、座標を変更すると、描画する四角形を見ることができます。ここに私のコードと結果は次のとおりです。領域を指定して、現在のクリップ交わる

:ここ

Region region = new Region(); 
Rect rect1 = new Rect(200, 200, 300, 300); 
region.Union(rect1); 
Rect rect2 = new Rect(400, 400, 500, 500); 
region.Union(rect2); 

canvas.ClipRegion(region)方法を説明するdocumentです。 clipRegion()は、引数を現在の行列で変換するclipRect()やclipPath()とは異なり、引数がすでに現在のレイヤのビットマップの座標系にあるとみなし、変換は行われません。

EDIT:

clipRegion()ためcoornadite、clipRect()座標。

+0

ありがとうございます。私は自分の座標を変更し、図形を表示することができます。しかし、私はあなたの説明に同意しない。 ActionBarや他の何かが私の形をカバーし、それが第2のケースでは見えない場合、なぜその形が最初のケースで見られるのでしょうか? – Frank

+0

現在の行列で引数を変換するclipRect()やclipPath()と違って、clipRect()メソッドを意味し、その座標は現在の行列、配置される空間です。しかし、ClipRegion()メソッドの場合、その座標は現在のレイヤのビットマップ、電話画面です。彼らの座標は異なっている。 –

+0

私は自分の答えを更新しました。確認してください。 :) –

関連する問題