
public class VectorTextView extends androidx.appcompat.widget.AppCompatTextView {
public VectorTextView(Context context) {
super(context);
init();
}
public VectorTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public VectorTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
setLayerType(LAYER_TYPE_SOFTWARE, null); // 软件渲染
getPaint().setAntiAlias(false); // 关闭抗锯齿
getPaint().setSubpixelText(false); // 关闭亚像素渲染
setTextColor(Color.BLACK); // 纯黑
}
}
你看到的效果——既保留了 XML 样式、gravity、padding、换行等,又能强制成纯黑——是因为:
AppCompatTextView 继承自 TextView,内部早就帮你写好了 onDraw(Canvas),它会按照 gravity、textSize、ellipsize、lineSpacing、padding、textAlignment 等各种属性去绘制文字。
AppCompatTextView,但不去重写 onDraw(),那么绘制逻辑还是走 系统 TextView 的原始流程。
getPaint() 拿到的就是 TextView 内部真正用来画文字的 TextPaint。
onDraw() 去画字时,它用的正是这个 Paint,所以你对它设置的
getPaint().setAntiAlias(false); getPaint().setSubpixelText(false); setTextColor(Color.BLACK);
都会生效。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。