android drawText/drawLines不显示的原因


1.重写View的onDraw不被执行的情况:

如果重写了View的onDraw方法没有被执行。执行方法

setWillNotDraw(false);
2.重写View的onDraw方法执行了(其中的log信息为证),draw方法不好用的可能:代码如下

@Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub Log.d(TAG, "ShootingAnimationView ---- onDraw()"); super.onDraw(canvas); if(showFrame){ if(mPaint == null){ mPaint = new Paint(); } float []points = { getLeft()+10,getTop()+10, /*A*/ getRight(),getTop()+10, /*B*/ getLeft()+10,getBottom()-10, /*C*/ getRight()-10,getBottom()-10, /*D*/ getLeft()+10,getTop()+10, /*A*/ getLeft()+10,getBottom()-10, /*C*/ getRight()-10,getTop()+10, /*B*/ getRight()-10,getBottom()-10, /*D*/ }; canvas.drawLines(points, 0, 16, mPaint); Log.d(TAG, "drawLines"); canvas.drawText("I am Bill.", getLeft(), getTop(), mPaint); } }
这段代码是有问题的。

首先:

如果这个是充满父控件显示的,这个时候,线可以画出来,距离边框10像素,画一个矩形。

但是文字不能画出来。这里的原因是:drawText方法的x、y是文字左下角的坐标。所以文字出屏幕了。改成,

canvas.drawText("I am Bill.", getLeft(), getTop()+30, mPaint);可以看到文字了。


其次:

如果View的布局属性不是充满父控件,这样就真的出问题了。

例如父控件的布局是充满父控件的,而被重写的这个View的宽搞都为200像素,

这样会发现,线和文字都没有画上去。原因是

getLeft(),方法获得的是View相对父空间的像素点位置,也就是View的左边框距离父控件的左边框的距离。假设是500像素。

这个时候在drawLines方法总用500的意思是在距离View左边框500像素的位置画点。而View总共的宽度才200像素。

超出了。所有看不到画的线。

在drawText和drawLines方法中,View的左边框像素就是0,top也是0.跟父控件没关系,即跟 getLeft()等系列方法没有关系。


总之,drawText/drawLines不显示的原因,要么是onDraw方法没有执行,要么就是坐标位置没有指定对。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值