2017-06-09 3 views
0

Ich benutze Xamarin, um eine Android-App zu entwickeln. Wenn ich versuche, die Region-Klasse zu verwenden, habe ich ein Problem, unter dem Code kann gut funktionieren und einen erwarteten blauen Bereich anzeigen.Ich verstehe nicht Region Klasse sehr gut

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

Aber unter Code funktioniert nicht, nur nichts zeigen, einen leeren Hintergrund

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

Ich weiß nicht, warum.

Antwort

0

In der Tat funktioniert es, aber es kann durch Ihre ActionBar oder etwas anderes blockiert werden, so dass Sie es nicht sehen können und Sie denken, dass es nicht funktioniert, wie this. Aber wenn Sie die Koordinaten ändern, können Sie das Rechteck sehen, das Sie zeichnen. Hier ist mein Code und Ergebnis:

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

Hier ist die document die canvas.ClipRegion(region) Methode zu erklären:

Intersect des aktuellen Clip mit dem angegebenen Bereich. Beachten Sie, dass im Gegensatz zu clipRect() und clipPath(), die ihre Argumente durch die aktuelle Matrix transformieren, clipRegion() davon ausgeht, dass ihr Argument bereits im Koordinatensystem der Bitmap der aktuellen Ebene enthalten ist und keine Transformation ausgeführt wird.

EDIT:

für clipRect() Koordinaten, coornadite für clipRegion().

+0

Danke. Ich habe meine Koordinaten geändert und die Formen können angezeigt werden. Aber ich stimme deiner Erklärung nicht zu. Wenn ActionBar oder etwas anderes meine Form bedeckt und es im zweiten Fall nicht zu sehen ist, warum dann diese Formen im ersten Fall gesehen werden können? – Frank

+0

Beachten Sie, dass im Gegensatz zu clipRect() und clipPath(), die ihre Argumente durch die aktuelle Matrix, dh die Methode clipRect() transformieren, ihre Koordinate die aktuelle Matrix ist, der Raum, in dem sie platziert wird. Bei der ClipRegion() -Methode ist die Koordinate jedoch die Bitmap der aktuellen Ebene, der Telefonbildschirm. Ihre Koordinate ist anders. –

+0

Ich habe meine Antwort aktualisiert, bitte überprüfen Sie es. :) –