Android自定义控件复写View的onDraw()方法,参数canvas是从哪里来的?

参数canvas是怎么得来的?@OverrideprotectedvoidonDraw(Canvascanvas){super.onDraw(canvas);intr=g... 参数canvas是怎么得来的?
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
int r=getWidth()/2;
int centerX=getLeft()+r;
int centerY=getTop()+r;
Paint paint=new Paint();
paint.setColor(Color.RED);
canvas.drawCircle(centerX,centerY,r,paint);
}
展开
 我来答
爱蛐
2020-08-26 · TA获得超过792个赞
知道小有建树答主
回答量:436
采纳率:71%
帮助的人:142万
展开全部

看源码View.java

上图,draw方法会调用onDraw。

ViewRootImpl.java中

如果是软件绘制的话,drawSoftWare方法会调用view.draw()方法。

从上图中可以看到canvas来源于mSurface.lockCanvas。这里会调用到native层,简单点说就是去申请了一块buffer。这个时候canvas就可以用了,接下来就会调用view.draw方法。

具体点的过程自己可以去看看。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式