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);
    
        }
  • 相关阅读:
    HDU
    HDU
    西电OJ
    西电OJ
    西电OJ
    USACO 2.1-Healthy Holsteins
    USACO 2.1-Sorting a Three-Valued Sequence
    HDU
    UVA
    codeforces 811A Vladik and Courtesy
  • 原文地址:https://www.cnblogs.com/wenhui92/p/7618350.html
Copyright © 2011-2022 走看看