安卓14自由窗口圆角处理之绘制圆角轮廓线

背景:

前面文章已经分享过:

如何一行代码搞定自由窗口的圆角处理?-wms/自由窗口/sf实战开发

但是又有学员朋友提出另一个blog的成果:

安卓aosp14上自由窗口划线边框Freeform Caption实战开发-千里马framework实战

想要把划线和圆角进行结合,把划线也变成圆角的,但是目前结合之后的情况是这样的:

下面就带大家来解决这样一个小需求小问题。

解决方法:

因为本质上划线只是一个自定义的OutlineLayout,所以只需要把当前的绘制矩形变成绘制圆角矩形既可以,但是绘制圆角矩形肯定需要圆角的半径和自由窗口的圆角半径保持一直,所以这里需要把自由窗口圆角半径设置给OutlineLayout。 设置圆角半径部分的代码: 半径来源: 主动设置半径

OutlineLayout部分的完整代码:

cpp 复制代码
public class OutlineLayout extends LinearLayout {

    float mCornerRadius = 0;
    public OutlineLayout(Context context) {
        super(context);
    }

    public OutlineLayout(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public OutlineLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public OutlineLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    public void setCornerRadius(float cornerRadisRadius) {
        this.mCornerRadius = cornerRadisRadius;
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setAntiAlias(true);
        paint.setStrokeWidth(30);
        paint.setStyle(Paint.Style.STROKE);
        RectF rect = new RectF(0,0,getWidth(),getHeight());
        //canvas.drawRect(rect,paint);canvas.draw
        canvas.drawRoundRect(rect,mCornerRadius,mCornerRadius,paint);
    }
}

整体代码也很简单,主要就是以下2个修改: 1、提供设置圆角半径的接口给外部

2、针对使用canvas.drawRoundRect绘制圆角的矩形

更多framework实战干货,请关注下面"千里马学框架"

相关推荐
用户05954017446几秒前
AI Agent 上下文污染踩坑实录:用 pytest + Redis 揪出 3 类记忆串号 bug,排查 6 小时
前端·css
满栀58510 分钟前
状态管理:Redux、Vuex、Pinia 核心区别
前端·javascript·typescript
一拳不是超人1 小时前
DeepSeek Harness 为什么敢说"一切皆插件"?拆透 Cordis 引擎的五大核心机制
前端·人工智能·agent
IT_陈寒1 小时前
Python的GIL让我多写了500行代码
前端·人工智能·后端
风骏时光牛马1 小时前
AI智能体能力调度微服务
前端
Eloudy3 小时前
ReAct 原理简介
前端·javascript·人工智能·react.js·agent·gpu
ZJU_统一阿萨姆4 小时前
【DSH】如何将 DeepSeek Harness 嵌入生产环境?万字解构 DeepSeek Agent Harness 的运行机制与安全边界
前端·javascript·安全
用户921080262864 小时前
4. 前端地图大量点位实时更新优化:后端推增量,前端做 diff
前端
SoaringHeart4 小时前
Flutter最佳实践:Web项目中文字体首次加载乱码问题解决
前端·flutter
西安小哥5 小时前
破局与重生:大厂前端如何借力 AI 转型“超级全栈“
前端·人工智能