android 自定义View之将字体绘制在Rect中间

来源:互联网 发布:机床的重要性 知乎 编辑:程序博客网 时间:2024/06/05 22:57
@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);    }}
原创粉丝点击