在 Android 中使用 XML Shape 繪製「半橢圓」形狀(如底部圓弧、頂部平直),用作背景或卡片樣式。
res/drawable/half_oval.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="https://schemas.android.com/apk/res/android">
<!-- 底部半圓矩形 -->
<item>
<shape android:shape="rectangle">
<solid android:color="@color/colorAccent" />
<corners
android:bottomLeftRadius="30dp"
android:bottomRightRadius="30dp"
android:topLeftRadius="0dp"
android:topRightRadius="0dp" />
</shape>
</item>
<!-- 可選:頂部添加一條分隔線 -->
<item android:top="200dp"> <!-- 根據實際高度調整 -->
<shape android:shape="rectangle">
<size android:height="1dp" />
<solid android:color="@android:color/transparent" />
</shape>
</item>
</layer-list>
public class HalfOvalView extends View {
private Paint paint;
private RectF rectF;
public HalfOvalView(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.parseColor("#FF4081"));
paint.setStyle(Paint.Style.FILL);
}
@Override
protected void onDraw(Canvas canvas) {
int w = getWidth(), h = getHeight();
// 底部半橢圓:寬度為 w,高度為 h/2,中心在 (w/2, h)
rectF = new RectF(0, h/2f, w, h + h/2f);
canvas.drawOval(rectF, paint);
}
}
佈局中使用:<com.example.HalfOvalView android:layout_width="match_parent" android:layout_height="100dp"/>
| 維度 | Layer-list XML | 自定義 View |
|---|---|---|
| 實現難度 | 低 | 中 |
| 性能 | 極佳(原生優化) | 良好(需注意 onDraw 頻率) |
| 靈活性 | 固定形狀 | 動態參數、動畫、交互 |
| 適用場景 | 靜態背景、卡片、按鈕 | 複雜圖形、進度條、儀表盤 |