首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Shape 繪製半橢圓形背景的兩種實現方式

     編輯:程式設計綜合問答

需求

在 Android 中使用 XML Shape 繪製「半橢圓」形狀(如底部圓弧、頂部平直),用作背景或卡片樣式。

方案一:Layer-list 組合(推薦,兼容性好)

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>

方案二:自定義 View 繪製(完全可控)

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 頻率)
靈活性固定形狀動態參數、動畫、交互
適用場景靜態背景、卡片、按鈕複雜圖形、進度條、儀表盤

使用建議

  • 純靜態半橢圓背景 → 直接用 Layer-list + corners,簡單高效。
  • 需動態改變半徑、顏色、動畫 → 選 自定義 View。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved