RoundRectShapepublic class RoundRectShape extends RectShape Creates a rounded-corner rectangle. Optionally, an inset (rounded) rectangle
can be included (to make a sort of "O" shape).
The rounded rectangle can be drawn to a Canvas with its own draw() method,
but more graphical control is available if you instead pass
the RoundRectShape to a {@link android.graphics.drawable.ShapeDrawable}. |
Fields Summary |
---|
private float[] | mOuterRadii | private android.graphics.RectF | mInset | private float[] | mInnerRadii | private android.graphics.RectF | mInnerRect | private android.graphics.Path | mPath |
Constructors Summary |
---|
public RoundRectShape(float[] outerRadii, android.graphics.RectF inset, float[] innerRadii)RoundRectShape constructor.
Specifies an outer (round)rect and an optional inner (round)rect.
if (outerRadii != null && outerRadii.length < 8) {
throw new ArrayIndexOutOfBoundsException("outer radii must have >= 8 values");
}
if (innerRadii != null && innerRadii.length < 8) {
throw new ArrayIndexOutOfBoundsException("inner radii must have >= 8 values");
}
mOuterRadii = outerRadii;
mInset = inset;
mInnerRadii = innerRadii;
if (inset != null) {
mInnerRect = new RectF();
}
mPath = new Path();
|
Methods Summary |
---|
public android.graphics.drawable.shapes.RoundRectShape | clone()
RoundRectShape shape = (RoundRectShape) super.clone();
shape.mOuterRadii = mOuterRadii != null ? mOuterRadii.clone() : null;
shape.mInnerRadii = mInnerRadii != null ? mInnerRadii.clone() : null;
shape.mInset = new RectF(mInset);
shape.mInnerRect = new RectF(mInnerRect);
shape.mPath = new Path(mPath);
return shape;
| public void | draw(android.graphics.Canvas canvas, android.graphics.Paint paint)
canvas.drawPath(mPath, paint);
| public void | getOutline(android.graphics.Outline outline)
if (mInnerRect != null) return; // have a hole, can't produce valid outline
float radius = 0;
if (mOuterRadii != null) {
radius = mOuterRadii[0];
for (int i = 1; i < 8; i++) {
if (mOuterRadii[i] != radius) {
// can't call simple constructors, use path
outline.setConvexPath(mPath);
return;
}
}
}
final RectF rect = rect();
outline.setRoundRect((int) Math.ceil(rect.left), (int) Math.ceil(rect.top),
(int) Math.floor(rect.right), (int) Math.floor(rect.bottom),
radius);
| protected void | onResize(float w, float h)
super.onResize(w, h);
RectF r = rect();
mPath.reset();
if (mOuterRadii != null) {
mPath.addRoundRect(r, mOuterRadii, Path.Direction.CW);
} else {
mPath.addRect(r, Path.Direction.CW);
}
if (mInnerRect != null) {
mInnerRect.set(r.left + mInset.left, r.top + mInset.top,
r.right - mInset.right, r.bottom - mInset.bottom);
if (mInnerRect.width() < w && mInnerRect.height() < h) {
if (mInnerRadii != null) {
mPath.addRoundRect(mInnerRect, mInnerRadii, Path.Direction.CCW);
} else {
mPath.addRect(mInnerRect, Path.Direction.CCW);
}
}
}
|
|