当前位置: 首页 > article >正文

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

背景:

前面文章已经分享过:

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

在这里插入图片描述

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

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

在这里插入图片描述

想要把划线和圆角进行结合,把划线也变成圆角的,但是目前结合之后的情况是这样的:
在这里插入图片描述

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

解决方法:

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

OutlineLayout部分的完整代码:

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实战干货,请关注下面“千里马学框架”


http://www.kler.cn/a/516154.html

相关文章:

  • 电脑办公技巧之如何在 Word 文档中添加文字或图片水印
  • 小哆啦的编程冒险:罗马数字转整数
  • 寒假刷题Day12
  • Apache Hive3定位表并更改其位置
  • Flutter 改完安卓 applicationId 后App 闪退问题。
  • STM32 ST7735 128*160
  • 天天AI-20250121:全面解读 AI 实践课程:动手学大模型(含PDF课件)
  • 【数据结构】顺序队列与链式队列
  • MySQL 主从复制(单组传统复制,GTID复制。双主复制)
  • qml ColorDialog详解
  • 【Unity】 HTFramework框架(五十九)快速开发编辑器工具(Assembly Viewer + ILSpy)
  • 没有屋檐的房子-023粪堆旁边的舞蹈
  • 国内股票年化收益回归分析(上)
  • 深度学习|表示学习|卷积神经网络|参数共享是什么?|07
  • 【MySQL】 库的操作
  • 【优选算法】7----三数之和
  • 树的宽度优先遍历(c++)
  • 头歌实训作业 算法设计与分析-贪心算法(第2关:最优装载问题)
  • 性能测试监控与诊断
  • ARM64平台Flutter环境搭建
  • EF Core 乐观、悲观并发控制
  • spring-springboot -springcloud
  • Sophon边缘盒数据校验及量化
  • Java拓展学习——Process类的学习和使用
  • mysql 计算2个时间段之间的间距
  • 差分轮算法-两个轮子计算速度的方法-阿克曼四轮小车计算方法