canvas绘制文字时坐标遇到的问题

前段时间在开发界面自定义视图的时候,根据产品的要求,用户的等级不设限制,所以用美工出图的方式来显示用的vip等级图标不太现实,之前的开发中基本都是用美工的图来显示的。后面自己想了想还是自己画一个吧,虽然时间有点赶。

那么在画这个vip图标的过程中遇到了一个很蛋疼的问题,就是canvas的绘制文字时坐标体系和安卓视图控件的坐标体系是不一样的。起初在ondrow()方法中绘制这个图标的时候完全不知道。以至于后面自己算了一遍又一遍的位置,明明没错,但是显示的位置就是错误的。后期有点抓狂。

具体的讲解有人已经写出来了,地址在这里:http://blog.csdn.net/lvxiangan/article/details/8540774

画文本的坐标体系和正常的安卓的坐标体系有点差别:

1,坐标原点是在文本的baseline线的左侧开始的地方。

2,Y轴以上为正,X轴以右为正。相当奇葩。

按照这样的坐标规则,最后成功将文本画出来了。

贴上代码:

@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //先画背景
        RectF targetRect = new RectF(0, 0, getMeasuredWidth(), getMeasuredHeight());
        canvas.drawRoundRect(targetRect, 3, 3, bg);

        float width = targetRect.right - targetRect.left;
        float heigth = targetRect.bottom - targetRect.top;

        float vWidth = levelIcon.measureText("V");
        float nWidth = number.measureText(String.valueOf(mLevel));

        Paint.FontMetricsInt vfm = levelIcon.getFontMetricsInt();
        float vLeft = targetRect.left + (width - vWidth - nWidth) / 2;
        float vTop = targetRect.top + (heigth - (vfm.bottom + vfm.top)) / 2;

        Paint.FontMetricsInt nfm = number.getFontMetricsInt();
        float nLeft = vLeft + vWidth;
        float nTop = targetRect.top + vTop;

        canvas.drawText("V", vLeft, vTop, levelIcon);
        canvas.drawText(String.valueOf(mLevel), nLeft, nTop, number);
    }



转载于:https://my.oschina.net/u/2419251/blog/500954

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值