图标不够大的时候添加背景,让每个图标看起来都一样大

这个其实也是遮罩的使用,之前写过一个遮罩的例子点击打开链接,大家可以看下

这个我就不做太多的说明了,直接黏贴代码,有问题可以留言

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);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值