Android : 画布绘制矩形和文字 让其居中显示简单应用

示例图:

CenterView.java

package com.example.demo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.View;

public class CenterView extends View {

    public CenterView(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStrokeWidth(10);//边框线大小
         /** 画矩形
         * 参数一 左边与左边框的距离, 参数二 顶部与上边框的距离,参数三,左边与右边宽的距离,参数四 顶部与下边框的距离
         * 宽度:左边到右边距离 600 - 100 =  500
         * 高度: 上面到下面距离 500 - 200 =  300
         */
        canvas.drawRect(100, 200, 600, 500, paint);

        /**画线
         * 基准线
         *  把文字放在矩形中 居中显示
         * */
        Paint paint4 = new Paint();
        paint4.setARGB(100, 120, 255, 0);
        paint4.setTextSize(100);//文字大小
        paint4.setStrokeWidth(10);//边框线大小
        //基准线
        //矩形的中心 上边距离 + 高度的一半 横
        canvas.drawLine(0, 200 + (300 / 2), 800, 200 + (300 / 2), paint4);

        //矩形的中心 左边距离 + 宽度的一半 竖 100 + (500 /2 )
        canvas.drawLine(100 + (500 / 2), 0, 100 + (500 / 2), 800, paint4);//画一条竖线

        //文字的宽度
        float textWidth = paint4.measureText("appbg");
        Log.e("TAG", "文字宽度:" + textWidth + "----画布宽度:" + getWidth() + "----画布高度:" + getHeight());

        //文字居中需要的对象
        Paint.FontMetrics fm = paint4.getFontMetrics();

        // 计算水平位置  (左边 100 + 宽度 500 - 文字宽度) /2 + 左边的一半
        float x = (600 - textWidth) / 2 + 50;
        // 矩形 宽度:左边到右边距离 600 - 100 =  500
        //矩形 高度: 上面到下面距离 500 - 200 =  300

        // 计算垂直位置 (上边 200 + 高度300)/2 - (文字的高度 :asscent(是负数) 和 descent 的高度)+高度的一半
        //500/2 +(asscent - descent) + 500/2
        float y = 500 / 2 + (fm.ascent - fm.descent) + 500 / 2;
        canvas.drawText("appbg", x, y, paint4);


    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);
 
        setContentView(new CenterView(this));
    }
 
}

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

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

相关文章

大数据Doris(四十二):使用物化视图

文章目录 使用物化视图 一、​​​​​​​创建物化视图

听GPT 讲Rust源代码--src/tools(29)

File: rust/src/tools/clippy/clippy_lints/src/unused_peekable.rs 在Rust源代码中,rust/src/tools/clippy/clippy_lints/src/unused_peekable.rs这个文件是Clippy工具中一个特定的Lint规则的实现文件,用于检测未使用的Peekable迭代器。 Peekable迭代器…

Bind for 0.0.0.0:2379 failed: port is already allocated

1、执行命令docker-compose -p docker-apisix up -d 报错 Error response from daemon: driver failed programming external connectivity on endpoint docker-apisix-etcd-1 (2a92a0cefff9194fcd1dad4bdeabf4201d9047ec2633eda455c6e46528668af4): Bind for 0.0.0.0:2379 fa…

Pandas教程(三)—— 数据清洗与准备

1.处理缺失值 1.1 数据删除函数 作用:删除Dataframe某行或某列的数据 语法:df.drop( labels [ ] ) drop函数的几个参数: labels :接收一个列表,内含删除行 / 列的索引编号或索引名 axis &…

用友薪福社解决社会化用工难题,助力企业走上“降本增效”之路

“就业”一直是人们关注的重点。用人需求与求职人数环比均明显上升,人力资源市场活跃度也明显增强,但供求关系整体仍旧偏紧。在行业快速发展的前提下,如何快速缓解企业用工荒难题,成为当前诸多企业面临的困境。为了科学合规地降低…

金融贷款行业怎么精准获客,电销打吐了!教你两招

助贷行业,一般都会设有kpi,压力竞争都不小。虽然现在贷款电销大家对此意见不同,但是,不可否认,这个行业,电销就是它们最快速的获客方式。只要耐得住性子,有一份精准的话单,就可以开工…

二叉树数据结构:深入了解二叉树的概念、特性与结构

在探索栈和队列之后(大家可以移步至我的数据结构专栏):T-rLN的数据结构专栏 我们转向了更为复杂而有趣的数据结构——二叉树。本文将引领我们进入二叉树的世界,从最基本的概念和结构开始,逐步深入了解二叉树的顺序结构…

Postman使用

Postman使用 Pre-request Script 参考: Scripting in Postman 可以请求、集合或文件夹中添加Pre-request Script,在请求运行之前执行JavaScript 如设置变量值、参数、Header和正文数据,也可以使用Pre-request Script来调试代码&#xff0…

解决Hive在DataGrip 中注释乱码问题

注释属于元数据的一部分,同样存储在mysql的metastore库中,如果metastore库的字符集不支持中文,就会导致中文显示乱码。 不建议修改Hive元数据库的编码,此处我们在metastore中找存储注释的表,找到表中存储注释的字段&a…

【汇编笔记】初识汇编-内存读写

汇编语言的由来: CPU是计算机的核心,由于计算机只认识二进制,所以CPU执行的指令是二进制。 我们要想让CPU工作,就得给他提供它认识的指令,这一系列的指令的集合,称之为指令集。 指令集: 不同的体…

VR全景图片制作时有哪些技巧,VR全景图片能带来哪些好处

引言: VR全景图片是通过虚拟现实技术制作出的具有沉浸感的图片,能够提供给用户一种身临其境的感觉。在宣传方面,它有着独特的优势和潜力,能够帮助吸引更多的潜在客户,那么VR全景图片制作时有哪些技巧,VR全…

【科普】家长们:如何早期发现孩子的听力问题?

孩子太小还不会说话, 或表达不准确, 家长往往很难发现他们听力下降; 那在生活中 如何发现孩子听力异常呢? 1、新生儿听力筛查 每一个新生儿出生后都要求做听力筛查,这样可以及早判断是否存在听力障碍的可能&#…

【Java 进阶篇】Jedis 操作 Set 与 SortedSet 详解

Redis 是一个强大的键值存储系统,而 Jedis 是 Redis 的 Java 客户端,为 Java 开发者提供了方便的操作接口。在这篇博客中,我们将深入探讨 Jedis 如何操作 Redis 中的 Set 和 SortedSet 数据结构。无论你是初学者还是有一些经验的开发者&#…

javaEE -18(11000字 JavaScript入门 - 3)

一:事件 (高级) 1.1 注册事件(绑定事件) 给元素添加事件,称为注册事件或者绑定事件,注册事件有两种方式:传统方式和方法监听注册方式 传统注册方式 : 利用 on 开头的…

dvwa问题篇 -- dvwa出现数据库无法访问的时候,Could not connect to the MySQL service. -- 小黑解决教程

各位小伙伴初次玩dvwa会出现各种问题,本来想把一些问题直接总结写一篇dvwa文章来着,但因为都是关键字搜索,所以将一些问题都拆分出来,以便大家方便查类似问题。(大家有遇到不一样的问题欢迎投稿!&#xff0…

windows使用docker运行主从数据库,io线程一直在connect

1需求: 实现mysql数据库主从同步 分析:实现主从同步需要两个数据库,这两个数据库一般放在不同的机器上(服务器上/个人PC上),我自己只有一个PC,也没有购买个人服务器,所以需要使用虚…

【辐射场】3D Gaussian Splatting

三维高斯…喷喷 \, 3D Gaussian Splatting,下文简称3DGS,是好一段时间以来在三维内容创作和三维重建领域比较有热度的一项技术。 它属于基于图像的三维重建方法,意思就是你对现实物体或者场景拍照片,就能给你训练成一个场景模型&a…

泛型的使用

泛型 泛型的概念 Java泛型是一种在编译时期进行类型检查和类型安全的机制,它可以让我们在编写代码时指定参数或返回值的类型,从而提高代码的可读性和可维护性。 孩童的智商可能还不足以理解泛型的具体概念和实现细节,但是我们可以通过类比…

unity exe程序置顶和全屏

1.置顶和无边框 设置显示位置和范围 using System; using System.Runtime.InteropServices; using UnityEngine; public class WindowMod : MonoBehaviour {public enum appStyle{FullScreen,WindowedFullScreen,Windowed,WindowedWithoutBorder}public enum zDepth{Normal…

【map】【滑动窗口】【优先队列】LeetCode480滑动窗口中位数

作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本题涉及知识点 滑动窗口 map 优先队列 题目 中位数是有序序列最中间的那个数。如果序列的长度是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。 例如&#xf…