自定义控件详解(七):drawText()

比较基础的一个方法。即绘制文本

使用如下:

Paint paint = new Paint();   

paint.setColor(Color.RED);   // 红色字体
paint.setStyle(Paint.Style.FILL); // 类型
paint.setStrokeWidth(1);       // 画笔线条宽度
paint.setTextSize(60);         // 绘制文本大小

// 绘制内容
canvas.drawText("听着music睡 ' blogs" , 100 , 200 , paint);

效果;

  可以看下方法:

 这篇只讨论第三个方法。

 可以看到 4个参数,第二个、第三个参数 是float类型,实际上就是 绘制的文本的绘制参考坐标。注意这个坐标 不是文本的左上角的那个点,float y 代表 基线的Y位置。

 验证一下:

 绘制一条蓝色的基线,绘制一个文本。

        Paint paint = new Paint();
 
        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(1);
        paint.setTextSize(60);

        int baseLine = 100 ;// 基线的Y坐标
        canvas.drawText("abcdefghi",30 , baseLine , paint);  // 绘制 (30,baseLine) 为参考点的文本
        paint.setColor(Color.BLUE);
        canvas.drawLine(30,baseLine ,300,baseLine,paint); // 绘制基线

 可以看到,绘制文本的参数(floatx , floaty) 指的是基线的左起点坐标而不是左上角。

扩展:

drawtext除了基线还有另外4条线,称为4格线。

分别是ascent,descent,top,bottom

  • ascent: 系统建议的,绘制单个字符时,字符应当的最高高度所在线
  • descent:系统建议的,绘制单个字符时,字符应当的最低高度所在线
  • top: 可绘制的最高高度所在线
  • bottom: 可绘制的最低高度所在线

怎么获取这4个线的y轴坐标呢,有一个类 FontMetrics

这些属性的值即 与基线的相对y轴距离(可能为负值)

示例:

        int baseLineY = 100 ;

        Paint.FontMetrics fm = paint.getFontMetrics();
        float ascent = baseLineY + fm.ascent ; // 制顶线
        float descent = baseLineY+fm.descent ; //制低线
        float top = baseLineY + fm.top ; // 最顶线
        float bottom = baseLineY + fm.bottom ; // 最低限

        // 基线
        paint.setColor(Color.RED);
        canvas.drawLine(baseLineX , baseLineY , 1000 , baseLineY , paint);

        // 制顶线
        paint.setColor(Color.BLUE);
        canvas.drawLine(baseLineX,ascent , 1000 , ascent , paint);

        // 制底线
        paint.setColor(Color.GREEN);
        canvas.drawLine(baseLineX,descent , 1000 , descent , paint);

        // 最顶线
        paint.setColor(Color.YELLOW);
        canvas.drawLine(baseLineX,top,1000,top  , paint);

        // 最底线
        paint.setColor(Color.MAGENTA);
        canvas.drawLine(baseLineX  , bottom  , 1000 , bottom ,paint);

        //写文字
        paint.setColor(Color.BLACK);
        canvas.drawText("听着music睡 ' blogs" ,baseLineX,baseLineY , paint);

可以看到:

黄色的最顶线top

蓝色的制顶线ascent

红色的基线baseline

绿色的制低线descent

粉色的最低限bottom

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Scott_Mr 个人专栏

程序员进阶之算法练习(一)

1213
来自专栏菩提树下的杨过

Silverlight:Mouse Avoiding 躲避鼠标效果

昨晚在一国外博客上(从域名后缀pl上猜想应该是波兰)看到这种效果(Mouse Avoid 躲避鼠标),是基于Flash/AS3开发的,这个示例把弹性运动,摩擦力...

1947
来自专栏向治洪

仿今天头条加载环境文字闪动效果

实现原理: ? 对Paint设置Shade,此处用的是LinearGradient,线性渐变,构造方法指定渐变的起始坐标和终止坐标,渐变的颜色,渐变的模式,然...

1925
来自专栏Scott_Mr 个人专栏

程序员进阶之算法练习(一)

3186
来自专栏CreateAMind

TensorFlow Debugger : Command-Line-Interface Tutorial: MNIST

This tutorial showcases the features of TensorFlow Debugger (tfdbg) command-line...

1246
来自专栏静默虚空的博客

排序八 基数排序

要点 基数排序与本系列前面讲解的七种排序方法都不同,它不需要比较关键字的大小。 它是根据关键字中各位的值,通过对排序的N个元素进行若干趟“分配”与“收集”来实现...

1969
来自专栏前端知识分享

第165天:canvas绘制圆环旋转动画

913
来自专栏吴小龙同學

Android 画笔Paint

了解Android Paint,一篇就够。引用Aige《自定义控件其实很简单》系列博客的话“很多时候你压根不需要了解太多原理,只需站在巨人的丁丁上即可”,所谓...

3195
来自专栏iOS开发攻城狮的集散地

CALayer系列、CGContextRef、UIBezierPath、文本属性Attributes

2015
来自专栏HenCoder

Android 开发进阶: 自定义 View 1-1 绘制基础

从今天开始,HenCoder 就正式开讲知识技能了。按照我的计划,第一季是 UI,UI 一共分为三部分:绘制、布局和触摸反馈。本期是绘制部分的第一期。绘制大概会...

682

扫码关注云+社区