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

Android ImageView 圓角矩形實現:Shape Drawable 與 setBackground 方案

     編輯:程式設計疑難解答

需求

將 ImageView 顯示的圖片/背景呈現為圓角矩形。

方案一:Shape Drawable 作為 Background(推薦簡單場景)

1. 定義 drawable/rounded_bg.xml

<?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>

2. 布局中應用

<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 圖片本身無透明區域,圓角效果會被蓋住。

方案二:將 Shape 設為 src(前景圖層),配合調整

若需圖片本身圓角裁剪,單純 background 無效。需:

  1. 自定義 RoundedImageView 重寫 onDraw 用 Canvas.clipPath 裁剪。
  2. 或使用 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>
    
  3. 或使用 Glide/Picasso 載入時應用 RoundCornersTransformation (Glide) / Transformation (Picasso) 生成圓角 Bitmap。

方案三:XML 定義 Layer List 疊加

<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 圖片內容。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved