zoukankan      html  css  js  c++  java
  • Android绘制文字时垂直居中

    canvas.drawText(String text, float x, float y, Paint paint);

    是Android中绘制文本的方法,其中的x代表文字绘制时在X轴的起始点,而y是在Y轴绘制时,文字的 baseline,不是文字的中心点也不是文字的底部。

    下面代码根据绘制的Y轴中心点centerY,算出了baseline,top,bottom,ascent和descent

        @Override
        protected void onDraw(Canvas canvas) {
    
            int top = mPaint.getFontMetricsInt().top;
            int bottom = mPaint.getFontMetricsInt().bottom;
            int ascent = mPaint.getFontMetricsInt().ascent;
            int descent = mPaint.getFontMetricsInt().descent;
    
            int baselineY =centerY + (bottom-top)/2 - bottom;
            top = baselineY + top;
            bottom = baselineY + bottom;
            ascent = baselineY + ascent;
            descent = baselineY + descent;
    
            mPaint.setColor(Color.GREEN);
            canvas.drawText(text, 100, baselineY, mPaint);
            canvas.drawLine(0, centerY, getMeasuredWidth(), centerY, mPaint);
    
            mPaint.setStrokeWidth(2);
    
            mPaint.setColor(Color.BLACK);
            canvas.drawLine(0, top, getMeasuredWidth(), top, mPaint);
    
            mPaint.setColor(Color.YELLOW);
            canvas.drawLine(0, ascent, getMeasuredWidth(), ascent, mPaint);
    
            mPaint.setColor(Color.RED);
            canvas.drawLine(0, baselineY, getMeasuredWidth(), baselineY, mPaint);
    
            mPaint.setColor(Color.YELLOW);
            canvas.drawLine(0, descent, getMeasuredWidth(), descent, mPaint);
    
            mPaint.setColor(Color.BLACK);
            canvas.drawLine(0, bottom, getMeasuredWidth(), bottom, mPaint);
    
        }
  • 相关阅读:
    Log4j---文件解析以及语法使用
    Sessions 与Cookies详解
    Web三大组件之控制器组件Servlet(转载)
    单向链表和双向链表
    单向队列和环形队列
    稀疏数组
    XML解析器之JAXP与DOM4J
    DTD约束与schema约束的不同
    XML之基础和DTD解析
    数据库----SQL基本查询
  • 原文地址:https://www.cnblogs.com/wenhui92/p/7618350.html
Copyright © 2011-2022 走看看