自定义控件绘图篇(一)基本几何图形绘制

在Android开发中,自定义控件是一种强大的技术,它允许开发者创建具有独特外观和行为的UI组件。通过自定义控件,你可以实现标准组件库中没有的功能和设计。自定义控件通常涉及两个主要方面:布局和绘图。本回答将重点介绍如何在自定义控件中进行基本的绘图操作,特别是如何绘制基本的几何图形。

1. 绘图基础

在Android中,绘图主要通过Canvas类完成。Canvas提供了一系列方法来绘制点、线、矩形、圆、路径等。为了在自定义控件中绘图,你需要创建一个继承自View的类,并重写onDraw(Canvas canvas)方法,在其中进行绘图操作。

2. 创建自定义View

首先,创建一个自定义View类,继承自View

Java

1import android.content.Context;
2import android.graphics.Canvas;
3import android.graphics.Color;
4import android.graphics.Paint;
5import android.util.AttributeSet;
6import androidx.annotation.Nullable;
7
8public class CustomView extends View {
9
10    private Paint mPaint;
11
12    public CustomView(Context context) {
13        super(context);
14        init();
15    }
16
17    public CustomView(Context context, @Nullable AttributeSet attrs) {
18        super(context, attrs);
19        init();
20    }
21
22    public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
23        super(context, attrs, defStyleAttr);
24        init();
25    }
26
27    private void init() {
28        mPaint = new Paint();
29        mPaint.setColor(Color.RED);
30        mPaint.setStyle(Paint.Style.FILL);
31    }
32
33    @Override
34    protected void onDraw(Canvas canvas) {
35        super.onDraw(canvas);
36        // 在这里进行绘图操作
37    }
38}

3. 绘制基本几何图形

接下来,在onDraw()方法中,我们可以使用CanvasPaint来绘制不同的几何图形。

绘制矩形

Java

1@Override
2protected void onDraw(Canvas canvas) {
3    super.onDraw(canvas);
4    canvas.drawRect(50, 50, getWidth() - 50, getHeight() - 50, mPaint);
5}
绘制圆形
Java
1@Override
2protected void onDraw(Canvas canvas) {
3    super.onDraw(canvas);
4    float centerX = getWidth() / 2;
5    float centerY = getHeight() / 2;
6    float radius = Math.min(centerX, centerY) - 50;
7    canvas.drawCircle(centerX, centerY, radius, mPaint);
8}
绘制椭圆

Java

1@Override
2protected void onDraw(Canvas canvas) {
3    super.onDraw(canvas);
4    canvas.drawOval(50, 50, getWidth() - 50, getHeight() - 50, mPaint);
5}
绘制线
 

Java

1@Override
2protected void onDraw(Canvas canvas) {
3    super.onDraw(canvas);
4    canvas.drawLine(50, 50, getWidth() - 50, getHeight() - 50, mPaint);
5}
绘制点
Java
1@Override
2protected void onDraw(Canvas canvas) {
3    super.onDraw(canvas);
4    for (int i = 0; i < 10; i++) {
5        int x = (int) (Math.random() * getWidth());
6        int y = (int) (Math.random() * getHeight());
7        canvas.drawPoint(x, y, mPaint);
8    }
9}

4. 结合使用

你可以结合使用上述方法来绘制更复杂的图形。例如,绘制一个带有边框的彩色矩形:

Java
1@Override
2protected void onDraw(Canvas canvas) {
3    super.onDraw(canvas);
4    mPaint.setStyle(Paint.Style.FILL);
5    canvas.drawRect(50, 50, getWidth() - 50, getHeight() - 50, mPaint);
6
7    mPaint.setStyle(Paint.Style.STROKE);
8    mPaint.setStrokeWidth(5);
9    mPaint.setColor(Color.BLACK);
10    canvas.drawRect(50, 50, getWidth() - 50, getHeight() - 50, mPaint);
11}

通过以上步骤,你可以开始探索更高级的绘图功能,如路径、文本、位图等,进一步扩展你的自定义控件的能力。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用html+css设计一个列表清单小卡片

目录 简介: 效果图: 源代码: 可能的问题: 简介: 这个HTML代码片段是一个简单的列表清单设计。它包含一个卡片元素(class为"card"),内部包含一个无序列表(ul),列表项(li)前面有一个特殊的符号(△)。整个卡片元素设计成300px宽,150px高,具有圆角边…

【字符串】【滑动窗口+位运算+双指针】1、无重复字符的最长子串+2、尽可能使字符串相等+3、最长优雅子数组+4、移动零+5、反转字符串

2道简单3道中等 1、无重复字符的最长子串&#xff08;难度&#xff1a;中等&#xff09; 该题对应力扣网址 超时代码 老实说&#xff0c;在我写博客的时候&#xff0c;也不知道为啥超时了&#xff0c;因为我看和我AC的代码时间也差不了多少吧&#xff08;如果有大佬知道&…

误删分区后的数据拯救:双管齐下恢复策略

在数字化时代&#xff0c;数据的价值日益凸显&#xff0c;而误删分区作为常见的数据安全威胁之一&#xff0c;常常让用户措手不及。本文将深入探讨误删分区的现象&#xff0c;并为您揭示两种高效的数据恢复方案&#xff0c;旨在帮助您在最短时间内找回失去的数据&#xff0c;同…

1117 数字之王

solution 判断现有数字是否全为个位数 全为个位数&#xff0c;找出出现次数最多的数字&#xff0c;并首行输出最多出现次数&#xff0c;第二行输出所有出现该次数的数值不全为个位数 若当前位数值为0&#xff0c;无需处理若当前位数值非0&#xff0c;则每位立方相乘&#xff0…

Linux搭建hive手册

一、将hive安装包上传到NameNode节点并解压 1、删除安装MySQL时的.rpm文件 cd /opt/install_packages/ rm -rf *.rpm 2、将安装包拖进/install_packages目录 3、解压安装包 tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/softs/ 4、修改包名 cd /opt/softs mv apache-…

虚拟机下基于海思移植QT(一)——虚拟机下安装QT

0.参考资料 1.海思Hi3516DV300 移植Qt 运行并在HDMI显示器上显示 2.搭建海思3559A-Qt4.8.7Openssl开发环境 1.报错解决 通过下面命令查询 strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_通过命令行没有解决&#xff1a; sudo apt install libc6-dev libc6参考解决…

【国产开源可视化引擎Meta2d.js】锚点

国产开源 乐吾乐潜心研发&#xff0c;自主可控&#xff0c;持续迭代优化 Github&#xff1a;GitHub - le5le-com/meta2d.js: The meta2d.js is real-time data exchange and interactive web 2D engine. Developers are able to build Web SCADA, IoT, Digital twins and so …

【C语言题目】34.猜凶手

文章目录 作业标题作业内容2.解题思路3.具体代码 作业标题 猜凶手 作业内容 日本某地发生了一件谋杀案&#xff0c;警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说&#xff1a;不是我。 B说&#xff1a;是C。 C说&#xff1a;是D。 D说&#xff…

软件是什么?一个软件到底是哪些部分组成的-软件到底有哪些分支呢?

https://doc.youyacao.com/117/2163 软件是什么&#xff1f;一个软件到底是哪些部分组成的-软件到底有哪些分支呢&#xff1f; 何为软件 软件定义 的本质是通过软件编程实现硬件资源的虚拟化、灵活、多样和定制化功能&#xff0c;以最大化系统运行效率和能量效率。它基于硬…

SSM中小学生信息管理系统-计算机毕业设计源码02677

摘要 随着社会的发展和教育的进步&#xff0c;中小学生信息管理系统成为学校管理的重要工具。本论文旨在基于SSM框架&#xff0c;采用Java编程语言和MySQL数据库&#xff0c;设计和开发一套高效、可靠的中小学生信息管理系统。中小学生信息管理系统以学生为中心&#xff0c;通过…

H2 Database Console未授权访问漏洞封堵

背景 H2 Database Console未授权访问&#xff0c;默认情况下自动创建不存在的数据库&#xff0c;从而导致未授权访问。各种未授权访问的教程&#xff0c;但是它怎么封堵呢&#xff1f; -ifExists 很简单&#xff0c;启动参数添加 -ifExists &#xff0c;它的含义&#xff1a…

漏洞分析 | PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)

漏洞概述 PHP CGI&#xff08;Common Gateway Interface&#xff09;是在Windows平台上运行PHP的一种方式。CGI是一种标准接口&#xff0c;允许Web服务器与外部应用程序&#xff08;如PHP脚本&#xff09;进行交互&#xff0c;从而生成动态网页内容。 近期&#xff0c;PHP发布…

STMCUBEMX_IIC_LL库_AT24C64分页读取和写入

STMCUBEMX_IIC_LL库_AT24C64分页读取和写入 前言&#xff1a; 一个项目中构建的软件系统需要存储非常多的用户参数&#xff0c;大约有几千字节&#xff0c;所以牵扯到自己设计跨页写入算法&#xff0c;注意读出也是需要设计跨页读出算法的&#xff08;手册没强调&#xff0c;但…

二、从多臂老虎机看强化学习

二、从多臂老虎机看强化学习 2.1 多臂老虎机问题2.1.1 问题定义2.2.2 问题建模2.2.3 累积懊悔2.2.4 估计期望奖励 2.2 强化学习中的探索与利用平衡2.3 贪心策略2.4 上置信界算法2.5 汤普森采样算法 2.1 多臂老虎机问题 2.1.1 问题定义 在多臂老虎机(mutil-armed bandit, MAB)问…

专业电脑录歌软件,电脑录音的六大方法【你了解几个】

电脑录音怎么录&#xff1f;大多数电脑都是有自带的录音功能的&#xff0c;但是由于电脑系统自带的录音功能效果没那么好&#xff0c;很多情况下满足不了我们一些“刁钻”的录音需求。 那么电脑怎么录音&#xff1f;还有哪些好用的录音软件推荐&#xff1f;本文整理了多种电脑录…

常规情况与opencv图像中,计算直线与矩形框的交点

文章目录 1、普通方式1.1、普通计算过程1.2、优化方式 2、图像中的情况2.1、常规处理2.2、opencv中的处理2.2.1、cv::clipLine函数2.2.2、测试代码2.2.3、测试结果 1、普通方式 已知矩形框左上(x1,y1)、右下(x2,y2&#xff09;点&#xff0c;直线方程 y kxb&#xff0c;求交点…

桌面保存的Word文件删除怎么找回?超实用的三个方法?

在日常工作和学习中&#xff0c;我们经常会使用Word文档进行文字编辑和文件保存。但是&#xff0c;有时由于操作失误或系统故障&#xff0c;我们会不小心将存放在电脑桌面重要的Word文件删除了。导致无法挽回的损失&#xff0c;但幸运的是&#xff0c;有一些方法可以帮助我们找…

基于SpringBoot的乐校园二手书交易管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言 Java 数据库 MySQL 技术 SpringBoot框架 工具 Visual Studio、MySQL数据库开发工具 系统展示 首页 用户注册界面 二手图书界面 个人中心界面 摘要 乐校园…

新港海岸NCS8822 低功耗DP转VGA 分辨率支持1920*1200*60HZ

NCS8822描述&#xff1a; NCS8822是一个低功耗显示端口到vga转换器。NCS8822集成了一个与DP1.2兼容的接收器和一个高速三通道视频DAC。对于DP1.2输入&#xff0c;NCS8822支持1车道/2车道&#xff0c;也支持车道交换功能。对于VGA输出NCS8822&#xff0c;在60Hz帧率下对WUXGA&a…

【HICE】搭建不同的主机名访问web服务

1.首先进入1.conf.d编辑内容&#xff0c;再重启服务&#xff0c;关闭防火墙 2.部署网页haha.html和xixi.html 3.在vim /etc/hosts增加域名 3.在window中进行本地解析的编辑 4.浏览器的验证