android绘制文本

来源:互联网 发布:使命召唤12优化怎么样 编辑:程序博客网 时间:2024/05/19 17:59

 android中怎么在画布上绘制文本呢?大家知道anroid提供了一个方法:

        public void drawText(String text, float x, float y, Paint paint) ;

 这个方法中x,y不是指文本在cavas的左上角的位置,使用的时候要注意了。否则绘制出来的文本的位置和预想的不一样。

    参考http://blog.csdn.net/linghu_java/article/details/46404081文中描述。

    x:文本起始水平位置

    y:文本的baseline位置(非左上角位置)

   参考:

      


所有在绘制文本的时候,需要注意drawtext的x,y值。


        1.如上如果设置x,y为0;此时在屏幕上展示效果就是只看个到g这个字母下面部分。  

           原因是y为baseline的位置,那么文本的起点就是-baseline。

        2.如果要设置文本刚好显示完全:y应该为-r.top这个位置。

          r.top是怎么获取的呢?通过方法getTextBonds(0,1,paint)可以获取到。

         这里的Rect对象坐标并不是以左上角为准的,而是相对于左边中间靠下位置的一个点,就是图中的黄色五角。

         rect的起点就是baseline的位置开始的。

         canva.drawText(0,-r.top,paint);

        但是此时y方向显示完全了。x方向还是未对其到0点,原因是x代表图上蓝色框的位置。

       3.如果要让文本实际显示d字母对其到坐标0点,需要设置x为人,-r.left.此时从-r.left开始才是文本真正开始的位置。

         canva.drawText(-r.left,-r.top,paint);

        示列:将文本显示在起点为(0,0)区域高度为400的垂直居中。

         

        TextPaint textPaint = new TextPaint();        textPaint.setAntiAlias(true);        textPaint.setTextSize(FONT_SIZE);        textPaint.setColor(Color.WHITE);        textPaint.setTextAlign(Paint.Align.LEFT);        textPaint.setStyle(Paint.Style.FILL);        int xBase = 0;        int yBase = 0;        int ITEM_HEIGHT = 400;        Rect textRect = new Rect();        textPaint.getTextBounds("测", 0, 1, textRect);        canvas.drawText("测", xBase, yBase - textRect.top + (ITEM_HEIGHT - textRect.height())/2 , textPaint);

       另外,还有其他方法获取文本的高度:FontMetricsInt.top – FontMetricsInt.bottom等。





0 0