android - 自定义ViewGroup实现圆角边框效果外沿内容无法擦去?

查看:325
本文介绍了android - 自定义ViewGroup实现圆角边框效果外沿内容无法擦去?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

在对viewGroup实现圆角边框效果,我是我的代码:

public class NewViewGroup extends FrameLayout {
    public NewViewGroup(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onLayout(boolean c, int l, int t, int r, int b) {
        super.onLayout(c, l, t, r, b);
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.BLUE);
        paint.setStyle(Paint.Style.FILL);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
        canvas.drawRoundRect(new RectF(0, 0, getMeasuredWidth(), getMeasuredHeight()), 120, 120, paint);
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }
}

测试了一下:

<cn.litforest.source.widget.NewViewGroup
        android:layout_below="@+id/collapse_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:background="@drawable/raichu_face_by_keafox"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </cn.litforest.source.widget.NewViewGroup>

效果图:

出现问题,没办法把圆角外面的内容擦去,请问该怎么解决?

解决方案

看看这篇文章图像合成Xfermode和任意形状ImageView

关键原因是

这是因为直接通过Canvas#drawXX方法画图时, SRC仅是图形内的像素, 例如你画了一个圆, 那么SRC(即将要画的像素)仅是圆内的像素, 也就是说图片与圆不重叠的像素并不会有任何变化, 当然就不会消失了.

这篇关于android - 自定义ViewGroup实现圆角边框效果外沿内容无法擦去?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆