Android 自定义View中drawText位置注意事项小记

自定义view中难免会用到文字。一般做法都是直接drawtext,把里面才参数写上就完事儿了。只要难点在于位置的计算和大小的匹配。我们在attr中设置了自定义属性后。在继承view的类中用
TypedArray ta = context.obtainStyledAttributes(attrs,
		R.styleable.xxxx);

获取到之后。在根据里面的属性进行获取。

这些随便都能百度到就不说了。

在设置文字的size和位置的时候要注意

要先设置Paint.setTextSize(),在定义或者设置位置。因为Paint.setTextSize()会影响到位置的问题

下面放上代码

这是一个计算自定义文字宽度的方法

public static int getTextWidth(Paint paint, String str) {
	int iRet = 0;
	if (str != null && str.length() > 0) {
	    int len = str.length();
	    float[] widths = new float[len];
	    paint.getTextWidths(str, widths);
	    for (int j = 0; j < len; j++) {
		iRet += (int) Math.ceil(widths[j]);
	    }
	}
	return iRet;
    }
下面的代码是要把文字画在圆圈内的指定位置。做到无论圆圈半径多大都好。文字依然与圆圈的Y轴中线对齐

float textWidth = getTextWidth(textPaint, text);
	textPaint.setColor(mTextColor);
	textPaint.setTextSize(mTextSize);
	canvas.drawText(text, mRadius - textWidth / 2, mRadius
		- mRadius / 4, textPaint);
这样得出的结果。文字会出现在y轴中线的旁边。就是因为定义了宽度再设置setTextSize的问题

只要这样改一下

textPaint.setColor(mTextColor);
	textPaint.setTextSize(mTextSize);
	float textWidth = getTextWidth(textPaint, text);
	canvas.drawText(text, mRadius - textWidth / 2, mRadius
		- mRadius / 4, textPaint);

就可以解决了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值