安卓Paint绘制文字以及文字矩形区域位置确定

1.文字绘制

<1>先确定文字起点x,y坐标

private int baseLineX=100;
private int baseLineY=300;

<2>绘制文字

(1)先绘制基线
   canvas.drawLine(baseLineX,baseLineY,300,baseLineY,paint);
(2)绘制文字
  注:setTextAlign设置文字区域与baseLineX的位置关系
   paint.setTextAlign(Paint.Align.LEFT);
   canvas.drawText("Asmargg",baseLineX,baseLineY,paint);

<3>根据基线位置计算出ascent、dscent、top、bottom四条线位置

    float baseY=baseLineY;
    Paint.FontMetrics fontMetrics=paint.getFontMetrics();
    float ascentY=baseY+fontMetrics.ascent;
    float dscentY=baseY+fontMetrics.descent;
    float topY=baseY+fontMetrics.top;
    float bottomY=baseY+fontMetrics.bottom;

<4>绘制top线

    canvas.drawLine(baseLineX,topY,300,topY,paint);

<5>绘制bottom线

    canvas.drawLine(baseLineX,bottomY,300,bottomY,paint);

<6>绘制ascent线

    canvas.drawLine(baseLineX,ascentY,300,ascentY,paint);

<7>绘制dscent线

    canvas.drawLine(baseLineX,dscentY,300,dscentY,paint);

<8>计算出绘制文字区域的宽高

(1)计算出绘制文字区域的宽度
    float width=paint.measureText("Asmargg");
(2)计算出绘制文字的区域的高度
    float height=bottomY-topY;

<9>根据矩形获取到文字区域的实际top、bottom坐标

   int baseLineY=500;
    String text="FestMMMggg";
    paint.setTextSize(35);
    canvas.drawText(text,100,baseLineY,paint);
    Rect minrect=new Rect();
    paint.getTextBounds(text,0,text.length(),minrect);
    Log.d("177777","文字矩形左上和右下两点坐标="+minrect.toShortString());
    //注:因为getTextBounds默认设置文字基线在y=0的位置,所以如果想要得到文字矩形的实际位置,需要将minrect向下平移baseLineY的距离
    //所以实际的文字矩形的top和bottom位置为
    //更改画笔颜色和字体大小
    paint.setColor(Color.RED);
    float topLine=minrect.top+baseLineY;
    float bottomLine=minrect.bottom+baseLineY;

<10>实例

(1)已知文字左上角点为(100,100),知道文字内容和大小,绘制文字
    int lstartX=100;
    int lstartY=100;
    int baseLineY=0;
    String text="FsgK";
    paint.setTextSize(35);
    Paint.FontMetrics fontMetrics=paint.getFontMetrics();
    //获取到基线位置
    baseLineY= (int) (lstartY-fontMetrics.top);
    //绘制
    canvas.drawText(text,lstartX,baseLineY,paint);
(2)已知center位置为Y=100,起点x坐标为100,文字内容和文字大小,绘制文字 (注:center为top和bottom中间线),
    float center=100;
    float lstartX=100;
    float baseLineY=0;
    String text="FsgK";
    paint.setTextSize(35);
    Paint.FontMetrics metrics=paint.getFontMetrics();
    baseLineY=center+(metrics.bottom-metrics.top)/2-metrics.bottom;
    canvas.drawText(text,lstartX,baseLineY,paint);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值