【安卓/Android】自定义控件之弧形布局及clip系列方法抗锯齿

本文介绍了一种使用Xfermode实现抗锯齿的弧形布局方法,避免了clipPath带来的问题。通过在空白画布上绘制贝塞尔曲线,并结合Xfermode,实现了平滑的弧形边界,适用于各种屏幕尺寸。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开头必水,说是做弧形布局,不如说是Draw绘制这块踩坑,因为会对绘制结果进行裁剪(clipPath),而Path则是绘制贝塞尔曲线的结果。裁剪的通病用过的基本都知道,那就是抗锯齿,非常恶心,各种抗锯齿的办法基本GG。所以...我不打算用clip系列的办法(滑稽.jpg),而是Xfermode。Xfermode用起来问题也不大(参考链接),链接是别人的,基本知道是个啥就行了,没必要全部看完。

弧形布局大概长这样:

弧形布局

基本就是一个 FrameLayout 里边重写dispatchDraw()方法,通过绘制贝塞尔曲线 + Xfermode实现。具体方法是先在一个空白画布上绘制好一个弧形,通过Xfermode实现最终效果。

 基本的初始化

    private Paint mPaint;
    private PaintFlagsDrawFilter mDrawFilter;
    private PorterDuffXfermode mXfermode;
    private Path mPath;

    private void init() {
        mPaint = new Paint();
        //绘制贝塞尔曲线
        mPath = new Path();
        //启用硬件加速,否则会出现一些异常(比如黑边,设计器和模拟器可能依旧会存在黑边)
        setLayerType(View
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米歪(MiWi)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值