API-Referenz: Region
Die Region-Klasse repräsentiert einen komplexen Bereich auf der Leinwand, ähnlich wie ein Path, jedoch definiert durch ganzzahlige Koordinaten. Regionen sind für boolesche Operationen (wie Schnittmenge, Vereinigung, Differenz) und für Tests, ob ein Punkt oder Rechteck innerhalb des Bereichs liegt, hochoptimiert.
Überblick
Im Gegensatz zu Path, das Fließkommakoordinaten verwendet und Kurven enthalten kann, ist eine Region grundsätzlich eine Sammlung horizontaler Scanlines. Sie ist effizient für Hit-Tests und Clipping.
Regionen erstellen und ändern
// Leere Region erstellen
Region region = new Region();
// Auf ein Rechteck setzen
region.setRect(new IRect(0, 0, 100, 100));
// Aus einem Path setzen
// (Erfordert eine 'clip'-Region, die die maximalen Grenzen definiert)
Path path = new Path().addCircle(50, 50, 40);
Region clip = new Region();
clip.setRect(new IRect(0, 0, 200, 200));
region.setPath(path, clip);Boolesche Operationen
Die Stärke von Region liegt in ihrer Fähigkeit, mehrere Bereiche mit logischen Operatoren zu kombinieren.
Region regionA = new Region();
regionA.setRect(new IRect(0, 0, 100, 100));
Region regionB = new Region();
regionB.setRect(new IRect(50, 50, 150, 150));
// Schnittmenge: Ergebnis ist der überlappende Bereich (50, 50, 100, 100)
regionA.op(regionB, RegionOp.INTERSECT);
// Vereinigung: Ergebnis ist der kombinierte Bereich beider
regionA.op(regionB, RegionOp.UNION);
// Differenz: Entferne B aus A
regionA.op(regionB, RegionOp.DIFFERENCE);Verfügbare Operationen (RegionOp):
DIFFERENCE: A - BINTERSECT: A & BUNION: A | BXOR: (A | B) - (A & B)REVERSE_DIFFERENCE: B - AREPLACE: B
Hit-Testing
Sie können prüfen, ob ein Punkt oder Rechteck innerhalb einer Region liegt.
if (region.contains(10, 10)) {
// Punkt ist innerhalb
}
if (region.quickReject(new IRect(200, 200, 300, 300))) {
// Rechteck ist definitiv AUSSERHALB der Region
}Verwendung mit Canvas
Sie können eine Region verwenden, um den Canvas zu beschneiden.
canvas.clipRegion(region);Hinweis: Region-Operationen (wie setPath) sind strikt ganzzahlig. Kurven werden durch kleine Schritte angenähert. Für hochpräzises Rendering bevorzugen Sie Path. Region eignet sich am besten für komplexe UI-Hit-Tests oder pixelgenaue Clipping-Masken.