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;
}
<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 圖片 |
.transform(new RoundedCorners(20)),最簡潔。