这个其实也是遮罩的使用,之前写过一个遮罩的例子点击打开链接,大家可以看下
这个我就不做太多的说明了,直接黏贴代码,有问题可以留言
1.先自定义一个view
public class CommonCornerView extends RelativeLayout{
Bitmap mMaskBitmap;//前景
Bitmap mResourceBitmap;//背景
/**抗锯齿*/
PaintFlagsDrawFilter paintFlagsDrawFilter;
Rect mDrawingRect;
Paint mImagePaint;
public CommonCornerView(Context context) {
this(context,null);
}
public CommonCornerView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
initData();
initView();
initSet();
}
private void initData() {
}
private void initView() {
}
private void initSet() {
setWillNotDraw(false);
setBackgroundColor(Color.TRANSPARENT);
paintFlagsDrawFilter = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
Drawable drawable = getContext().getResources().getDrawable(R.drawable.flk_common_corner_mask);
if(drawable instanceof BitmapDrawable){
setMask(((BitmapDrawable)drawable).getBitmap());
}
}
public void setMaskResourceId(int resourceId){
Drawable drawable = getContext().getResources().getDrawable(resourceId);
if(drawable != null && drawable instanceof BitmapDrawable){
setMask(((BitmapDrawable)drawable).getBitmap());
}
}
public void setMask(Bitmap mask){
mMaskBitmap = mask;
}
public void setResourceBitmap(Bitmap bitmap){
mResourceBitmap = bitmap;
postInvalidate();
}
public void setResourceDrawable(Drawable drawable){
try {
if (drawable instanceof BitmapDrawable) {
setResourceBitmap(((BitmapDrawable) drawable).getBitmap());
} else {
Bitmap bitmap = Bitmap.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ?
Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight());
drawable.draw(canvas);
setResourceBitmap(bitmap);
}
}catch (Exception e){
e.printStackTrace();
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.setDrawFilter(paintFlagsDrawFilter);
drawResource(canvas);
}
private void drawResource(Canvas canvas) {
if (canvas == null) {
return;
}
if (mResourceBitmap != null) {
int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
canvas.drawBitmap(mResourceBitmap, null, getDrawingRect(), null);
if (mMaskBitmap != null) {
canvas.drawBitmap(mMaskBitmap, null, getDrawingRect(), getImagePaint());
}
canvas.restoreToCount(sc);
}
}
private Rect getDrawingRect() {
if (mDrawingRect == null) {
mDrawingRect = new Rect();
getDrawingRect(mDrawingRect);
}
return mDrawingRect;
}
private Paint getImagePaint() {
if (mImagePaint == null) {
mImagePaint = new Paint();
// mImagePaint.setColor(Color.RED);
mImagePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));//显示叠加的部分,显示背景的图,前景的图不显示
}
return mImagePaint;
}
}
2.调用的方法
adIcon.setResourceBitmap(bitmap);