Android自定义控件---DrawText 基线的确定
程序员文章站
2024-03-17 18:19:34
...
DrawText 基线的确定
上一篇写了自定义View的入门案例,里面涉及到一个知识点,基线的确定,这里做一个详细说明。
Android自定义View入门—自定义一个TextView
在自定义控件的时候,有时候会用到DrawText 方法.
这里我把上一篇自定义TextView的贴出来
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int x = getPaddingLeft();
//dy 代表的是:高度的一半到 baseLine的距离
Paint.FontMetricsInt fontMetrics = paint.getFontMetricsInt();
// top 是一个负值 bottom 是一个正值 top,bttom的值代表是 bottom是baseLine到文字底部的距离(正值)
// 必须要清楚的,可以自己打印就好
int dy = (fontMetrics.bottom - fontMetrics.top)/2 - fontMetrics.bottom;
int baseLine = getHeight()/2 + dy;
canvas.drawText(costom_text,x,baseLine,paint);
}
/**
* Draw the text, with origin at (x,y), using the specified paint. The
* origin is interpreted based on the Align setting in the paint.
*
* @param text The text to be drawn
* @param x The x-coordinate of the origin of the text being drawn
* @param y The y-coordinate of the baseline of the text being drawn
* @param paint The paint used for the text (e.g. color, size, style)
*/
public void drawText(@NonNull String text, float x, float y, @NonNull Paint paint) {
native_drawText(mNativeCanvasWrapper, text, 0, text.length(), x, y, paint.mBidiFlags,
paint.getNativeInstance(), paint.mNativeTypeface);
}
x,y 分别表示 基线的开始坐标,并不是 文字左上角的坐标,因为文字的绘制是以基线为基础的
图中的 五角星 所在的线 就是基线 BaseLine,那么如何确定基线的x,y坐标呢?
首写我们先确定一下x坐标 :int x = getPaddingLeft(); 也就是文字距左边的距离
y坐标:
1、我们先计算一下文字高度的一半到 baseLine的距离。
int dy = (fontMetrics.bottom - fontMetrics.top)/2 - fontMetrics.bottom;
2、之后我们再使用控件高度的一般,加上文字高度的一半到 baseLine的距离,就是基线的y坐标
int baseLine = getHeight()/2 + dy;
上一篇: 线程状态
下一篇: POJ1681画家问题(枚举)采用位运算
推荐阅读
-
Android自定义控件---DrawText 基线的确定
-
android之视频播放系统VideoView和自定义VideoView控件的应用 VideoAndroid自定义控件Android视频视频
-
Android自定义控件制作显示进度的Button
-
Android自定义控件制作显示进度的Button
-
轻松实现可扩展自定义的Android滚轮时间选择控件
-
Android自定义控件实现可左右滑动的导航条
-
Android自定义控件实现随手指移动的小球
-
轻松实现可扩展自定义的Android滚轮时间选择控件
-
Android自定义控件实现随手指移动的小球
-
Android自定义控件实现可左右滑动的导航条