当你开发中遇到这样一个需求,需要将一张正方形的图片在在应用中显示带圆弧的图标显示,而直接用android设置圆角又不符合UI的需求,此时就需要用android设置画图方法setXfermode进行遮罩处理。
自定义ImageView如下:
public MaskIconView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mPaint = new Paint();
mPorterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.DST_OUT);
mMaskBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.allmenu_icon_mask);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//需要设置View的硬件加速,不然会出现黑色背景和将背景透视问题
setLayerType(LAYER_TYPE_HARDWARE, mPaint);
mPaint.setXfermode(mPorterDuffXfermode);
canvas.drawBitmap(mMaskBitmap, 0, 0, mPaint);
mPaint.setXfermode(null);
}
如果需要设置按键的触摸效果,需要使用tint的属性,设置属性android:tint="@color/app_color_selector"。
<com.android.example.widgets.MaskIconView
android:id="@+id/iv_icon"
android:layout_centerHorizontal="true"
android:tint="@color/app_color_selector"
android:layout_width="134dp"
android:layout_height="134dp"
/>
app_color_selector如下:
其默认为透明色