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

Android ListView 圖片圓角顯示:ViewBinder 處理 Bitmap 或 Item 佈局疊加圓角框

     編輯:程式設計綜合問答

方案一:ViewBinder 在綁定時對 Bitmap 做圓角處理

adapter.setViewBinder(new SimpleAdapter.ViewBinder() {
    @Override
    public boolean setViewValue(View view, Object data, String textRepresentation) {
        if (view instanceof ImageView && data instanceof Bitmap) {
            ImageView iv = (ImageView) view;
            Bitmap source = (Bitmap) data;
            Bitmap rounded = getRoundedCornerBitmap(source, 20); // 圓角半徑 20px
            iv.setImageBitmap(rounded);
            return true; // 已處理,跳過默認邏輯
        }
        return false;
    }
});

// 圓角 Bitmap 生成工具方法
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float radius) {
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
    Paint paint = new Paint();
    Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    RectF rectF = new RectF(rect);
    paint.setAntiAlias(true);
    canvas.drawRoundRect(rectF, radius, radius, paint);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);
    return output;
}

方案二:Item 佈局疊加圓角遮罩圖片(無需修改 Bitmap)

<FrameLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/iv_image"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:scaleType="centerCrop" />

    <ImageView
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@drawable/rounded_mask" /> <!-- 中間透明圓角矩形,四角不透明色與列表背景一致 -->

</FrameLayout>

@drawable/rounded_mask 為一張 PNG:四角填充列表背景色(如白色),中間透明圓角矩形。

對比

維度方案一方案二
性能運行時創建 Bitmap,列表多項易 OOM零額外內存,僅佈局疊加
靈活性圓角半徑可動態調整圓角固定,需多張 mask 適配不同尺寸
實現複雜度需編寫 Canvas 代碼僅需準備 mask 圖片

建議

  • 列表項較少、圓角需動態變 → 方案一。
  • 長列表、固定圓角 → 方案二更安全高效。
  • 現代開發直接用 **Glide** 載入時鏈式調用 .transform(new RoundedCorners(20)),最簡潔。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved