自定义控件之绘图篇(二)路径及文字

在Android中,自定义控件的绘图功能非常强大,允许你创建复杂且美观的用户界面元素。除了基本的几何图形,你还可以使用路径(Path)和文字(Text)来丰富你的控件设计。下面是如何在自定义控件中使用这些功能的指南。

使用Path绘制复杂形状

Path类用于绘制自由曲线和复杂的形状。通过一系列的moveTo, lineTo, quadTo, cubicTo, arcTo等方法,你可以构建出任何想要的图形。

创建自定义View

我们先从一个简单的自定义View开始:

Java

1public class PathCustomView extends View {
2    private Paint paint;
3    private Path path;
4
5    public PathCustomView(Context context) {
6        super(context);
7        init();
8    }
9
10    public PathCustomView(Context context, @Nullable AttributeSet attrs) {
11        super(context, attrs);
12        init();
13    }
14
15    private void init() {
16        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
17        paint.setColor(Color.BLUE);
18        paint.setStyle(Paint.Style.STROKE);
19        paint.setStrokeWidth(5);
20
21        path = new Path();
22    }
23
24    @Override
25    protected void onDraw(Canvas canvas) {
26        super.onDraw(canvas);
27        drawPath(canvas);
28    }
29
30    private void drawPath(Canvas canvas) {
31        path.reset();
32        path.moveTo(50, 50);
33        path.lineTo(150, 200);
34        path.lineTo(250, 50);
35        path.close();
36        canvas.drawPath(path, paint);
37    }
38}

在这个例子中,我们定义了一个三角形,通过moveTo移动到起始点,然后用lineTo绘制线段,最后用close闭合路径。

绘制文字

在自定义控件中添加文字可以让你的界面更加丰富。使用Canvas.drawText(String text, float x, float y, Paint paint)方法即可在指定位置绘制文字。

修改自定义View

我们将上面的例子稍作修改,添加一些文字:

Java

1public class TextCustomView extends View {
2    private Paint paint;
3    private Path path;
4    private String text = "Hello, Android!";
5    
6    public TextCustomView(Context context) {
7        super(context);
8        init();
9    }
10
11    public TextCustomView(Context context, @Nullable AttributeSet attrs) {
12        super(context, attrs);
13        init();
14    }
15
16    private void init() {
17        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
18        paint.setTextSize(60);
19        paint.setTextAlign(Paint.Align.CENTER);
20        
21        path = new Path();
22    }
23
24    @Override
25    protected void onDraw(Canvas canvas) {
26        super.onDraw(canvas);
27        drawPath(canvas);
28        drawText(canvas);
29    }
30
31    private void drawPath(Canvas canvas) {
32        path.reset();
33        path.moveTo(50, 50);
34        path.lineTo(150, 200);
35        path.lineTo(250, 50);
36        path.close();
37        canvas.drawPath(path, paint);
38    }
39
40    private void drawText(Canvas canvas) {
41        float centerX = getWidth() / 2f;
42        float centerY = getHeight() / 2f + 100;
43        canvas.drawText(text, centerX, centerY, paint);
44    }
45}

结合使用Path和Text

你也可以在同一个自定义控件中同时使用PathText,这样就可以在图形上添加注释或者标签,使得控件更加功能化和美观。

完整代码示例

Java

1public class PathTextCustomView extends View {
2    private Paint paint;
3    private Path path;
4    private String text = "Hello, Android!";
5
6    public PathTextCustomView(Context context) {
7        super(context);
8        init();
9    }
10
11    public PathTextCustomView(Context context, @Nullable AttributeSet attrs) {
12        super(context, attrs);
13        init();
14    }
15
16    private void init() {
17        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
18        paint.setColor(Color.BLUE);
19        paint.setStyle(Paint.Style.STROKE);
20        paint.setStrokeWidth(5);
21        paint.setTextSize(60);
22        paint.setTextAlign(Paint.Align.CENTER);
23        
24        path = new Path();
25    }
26
27    @Override
28    protected void onDraw(Canvas canvas) {
29        super.onDraw(canvas);
30        drawPath(canvas);
31        drawText(canvas);
32    }
33
34    private void drawPath(Canvas canvas) {
35        path.reset();
36        path.moveTo(50, 50);
37        path.lineTo(150, 200);
38        path.lineTo(250, 50);
39        path.close();
40        canvas.drawPath(path, paint);
41    }
42
43    private void drawText(Canvas canvas) {
44        float centerX = getWidth() / 2f;
45        float centerY = getHeight() / 2f + 100;
46        canvas.drawText(text, centerX, centerY, paint);
47    }
48}

通过上述代码,你可以在自定义控件中绘制一个带文字的三角形。这只是一个起点,你可以继续探索更多PathText的特性,以及如何结合使用其他绘图方法,如BitmapShader,来创建更复杂的自定义控件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/41912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot+ELK 收集日志的两种方式

方式一、FileBeatlogstash 7.5.1(docker)ES(docker)springboot 日志文件 应用方式 我们采用ELFK 架构采集日志,直接读取日志生成的文件,不对Springboot的日志任何的修改。也就是FileBeat 通过读取日志文件位置获取日志内容,然后发送至logsta…

This Person Does Not Exist:AI绘画工具创造的虚构人物

引言 随着人工智能技术的飞速发展,AI绘画工具已经能够生成逼真的虚构人物图像。这些工具利用生成对抗网络(GAN)等深度学习技术,能够生成从未存在过的高质量人脸图像。“This Person Does Not Exist” 是其中最著名的一个网站&…

移动应用开发课设——原神小助手文档(1)

2023年末,做的移动应用开发课设,分还算高,项目地址:有帮助的话,点个赞和星呗~ GitHub - blhqwjs/-GenShin_imp: 2023年移动应用开发课设 本文按照毕业论文要求来写,希望对大家有所帮助。 xxxx大学课程设计报…

C++--partition库函数

介绍 在C中,partition函数通常是指STL(Standard Template Library)中的std::partition算法,它用于对一个序列进行分区操作。具体来说,std::partition接受一个范围和一个谓词(predicate)作为参数…

安徽医科大学学报

《安徽医科大学学报》是安徽医科大学主办的医学综合类学术期刊。主要刊登医学科研、医疗成果和进展的学术性期刊,国内外公开发行。主办单位为安徽医科大学,主管单位为安徽省教育厅。现任主编是著名妇产科学和生殖医学专家曹云霞教授。 《东南医刊》和《新…

win10使用小技巧一

1. 查看电脑IP地址 步骤:按WinR打开运行框 → 输入cmd点确定 → 输入ipconfig回车 → 查看IP地址。 2. 解决网页文字不能复制 步骤:按F12 → 调试框里点击设置 → 向下滑找到 禁用 JavaScript → 勾选 → 复制文字。 3. 解决电脑不能上网 方法一&…

im即时通讯哪家好?WorkPlus im即时通讯集成底座为企业保驾护航

在当今数字化时代,即时通讯是企业内部沟通和协作的重要工具,提高工作效率和团队协作效果。在众多IM即时通讯提供商中,WorkPlus作为一家具有独特优势的企业IM即时通讯集成底座,为企业提供了全面的功能和安全保障,为企业…

Linux权限概述

一、权限概述 1.权限的基本概念 2.为什么要设置权限 3.linux用户的身份类别 4.user文件的拥有者 5.group文件所属组内用户 6.other其他用户 7.特殊用户root 二、普通权限管理 1.ls -l查看文件权限 2.文件类型以及权限解析 3.文件或文件夹的权限设置 4.通过数字给文件…

吴恩达深度学习笔记:机器学习策略(2)(ML Strategy (2)) 2.3-2.4

目录 第三门课 结构化机器学习项目(Structuring Machine Learning Projects)第二周:机器学习策略(2)(ML Strategy (2))2.3 快速搭建你的第一个系统,并进行迭代(Build your first system quickly…

Python 学习中什么是元组,如何使用元组?

什么是元组 元组(Tuple)是Python内置的一种数据结构,用于存储多个数据项。与列表类似,元组也可以存储不同类型的数据,但它们之间存在一个重要区别:元组是不可变的,也就是说,一旦创建…

智慧校园综合解决方案PPT(41页)

1. 方案背景 智慧校园综合解决方案响应《教育信息化2.0行动计划》等政策,旨在加快智慧校园建设,推动信息化与学习生活的深度融合。目前教育信息化配套设施建设存在“孤岛架构”,学生安全问题频发,技术发展迅速,家长对…

Python项目写一个dockerfile 怎么写一个deploy.sh文件来自动化部署

当为Python项目编写Dockerfile和xx.sh(我们通常会使用如deploy.sh这样的名字)脚本以进行自动化部署时,你可以遵循以下步骤和示例。 ### Dockerfile 示例 首先,让我们编写一个Dockerfile,用于构建一个包含Python项目的D…

专题三:Spring源码中新建module

前面我们构建好了Spring源码,接下来肯定迫不及待来调试啦,来一起看看大名鼎鼎ApplicationContext 新建模块 1、基础步骤 1.1 自定义模块名称如:spring-self 1.2 选择构建工具因为spring使用的是gradle,所以这边需要我们切换默认…

Android 如何通过代码实时设置EditTextView光标

背景:换肤框架下,QA进行深色浅色切换说输入框光标颜色没有改变,转UI结果UI说需要修改!!!!! 本来有方法可以设置,但是 设置后未生效。重新进入该页面才生效!&a…

Android 集成OpenCV

记录自己在学习使用OpenCV的过程 我使用的是4.10.0 版本 Android 集成OpenCV 步骤 下载OpenCV新建工程依赖OpenCV初始化及逻辑处理 1、下载OpenCV 并解压到自己的电脑 官网 地址:https://opencv.org/releases/ 个人地址:https://pan.baidu.com/s/19f…

这款新的 AI 语音助手击败了 OpenAI,成为 ChatGPT 最受期待的功能之一

OpenAI 推迟了 ChatGPT 令人印象深刻的语音模式,这让许多 AI 聊天机器人的粉丝感到不安,但他们现在可能已经被挖走了。法国人工智能开发商 Kyutai 推出了一款名为 Moshi 的实时语音 AI 助手。 Moshi 旨在通过语音(如 Alexa 或 Google Assista…

三、数据库系统(考点篇)试题

聚簇索引,也叫簇类索引,原理是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。每张表只能建一个聚簇索引,并且建聚簇索引需…

在VMware中安装Linux RHEL8操作系统

Linux操作系统安装 任务目标 了解虚拟机平台VMWARE的安装步骤。 了解RHEL8的安装步骤。 熟悉安装所必须的硬件环境。 任务要求 在VMWARE虚拟机平台上安装RHEL8,要求使用root用户成功登录,关闭虚拟机做好快照。将安装步骤记录在下方“操作步骤”&am…

51单片机嵌入式开发:3、STC89C52操作8八段式数码管原理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 STC89C52操作8八段式数码管原理 1 8位数码管介绍1.1 8位数码管概述1.2 8位数码管原理1.3 应用场景 2 原理图图解2.1 74HC573原理2.2 74HC138原理2.3 数码管原理 3 数码管程序…

跟《经济学人》学英文:2024年07月06日这期:Finishing schools for the age of TikTok

Finishing schools for the age of TikTok Unsure how to be polite at work? Ask a digital etiquette guru 不确定如何在工作中保持礼貌?请教一位数字礼仪大师 “Finishing schools” 是指专门为年轻女性提供礼仪、社交技巧、文化修养等教育的学校,…