將 ImageView 顯示的圖片/背景呈現為圓角矩形。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="https://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/white" /> <!-- 背景色 -->
<corners android:radius="12dp" /> <!-- 圓角半徑 -->
<stroke android:width="1dp" android:color="#CCCCCC" /> <!-- 可選邊框 -->
</shape>
<ImageView
android:id="@+id/iv_avatar"
android:layout_width="80dp"
android:layout_height="80dp"
android:background="@drawable/rounded_bg"
android:scaleType="centerCrop"
android:src="@drawable/your_image" />
關鍵:android:background 設 Shape,android:src 設圖片。但注意:background 在 src 之下繪製,若 src 圖片本身無透明區域,圓角效果會被蓋住。
若需圖片本身圓角裁剪,單純 background 無效。需:
RoundedImageView 重寫 onDraw 用 Canvas.clipPath 裁剪。CardView 包裹 ImageView:<androidx.cardview.widget.CardView
android:layout_width="80dp"
android:layout_height="80dp"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/your_image" />
</androidx.cardview.widget.CardView>
RoundCornersTransformation (Glide) / Transformation (Picasso) 生成圓角 Bitmap。<layer-list xmlns:android="...">
<item android:drawable="@drawable/your_image" />
<item>
<shape android:shape="rectangle">
<corners android:radius="12dp" />
<solid android:color="@android:color/transparent" />
<stroke android:width="2dp" android:color="#FFFFFF" /> <!-- 白邊模擬圓角遮罩 -->
</shape>
</item>
</layer-list>
作為 android:src 設置,但邊框遮罩法有邊緣鋸齒,不如代碼裁剪完美。
| 場景 | 推薦方案 |
|---|---|
| 靜態圖標/佔位圖,僅需外觀圓角框 | Shape Background + 透明 src |
| 用戶頭像、網絡圖片,需真實裁剪圓角 | CardView 包裹 或 Glide RoundCornersTransformation |
| 複雜列表、性能敏感 | Glide/Picasso 磁盤緩存圓角 Bitmap,避免運行時裁剪 |
ImageView 圓角矩形:簡單場景用 Shape Background,真實裁剪用 CardView 或圖片加載庫 Transformation。Shape 背景法最輕量,但僅能畫邊框,無法裁剪 src 圖片內容。