@SuppressLint("ViewConstructor")
public class NTextView extends View { private String TAG="NtextView"; public NTextView(Context context) { super(context); } public NTextView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public NTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void onDraw (Canvas canvas) { Rect targetRect = new Rect(50, 50, 1000, 200); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setStrokeWidth(3); paint.setTextSize(80); String testString = "测试:ijkJQKA:1234"; paint.setColor(Color.CYAN); canvas.drawRect(targetRect, paint); paint.setColor(Color.RED); Paint.FontMetricsInt fontMetrics = paint.getFontMetricsInt(); int baseline = (targetRect.bottom + targetRect.top - fontMetrics.bottom - fontMetrics.top) / 2; int baseline2=targetRect.bottom-((targetRect.bottom-targetRect.top-fontMetrics.bottom+fontMetrics.top)/2+fontMetrics.bottom); Log.i(TAG, "onDraw: "+baseline2); Log.i(TAG, "onDraw: "+baseline); Log.i(TAG, "onDraw: bottom"+targetRect.bottom+" top"+targetRect.top +" fBottom"+fontMetrics.bottom+" ftop"+fontMetrics.top); // 下面这行是实现水平居中,drawText对应改为传入targetRect.centerX() paint.setTextAlign(Paint.Align.CENTER); canvas.drawText(testString, targetRect.centerX(), baseline, paint); } }
本文介绍了如何在Android中创建一个自定义View `NTextView`,该View能够在指定的矩形区域`Rect`内将文字绘制在中间。通过设置`Paint`对象的属性和计算文字的基线,实现了文字的垂直居中对齐,并使用`canvas.drawText()`方法在矩形中心绘制文字。
608

被折叠的 条评论
为什么被折叠?



