文档详情

Android自定义ViewonDraw()方法会调用两次的问题解决.docx

发布:2025-05-10约1.01千字共2页下载文档
文本预览下载声明

Android自定义ViewonDraw()方法会调用两次的问题解决

目录问题分析

问题

自定义了View后,在构造函数中设置画笔颜色,发现它没起效,但是在onDraw()里设置颜色就会起效,出问题的代码如下:

publicRoundSeekbarView(Contextcontext,@NullableAttributeSetattrs){

super(context,attrs);

//布局引用调用的是两个参数的构造函数

paint=newPaint(Paint.ANTI_ALIAS_FLAG);

paint.setAntiAlias(true);

paint.setDither(true);

paint.setColor(Color.RED);

@Override

protectedvoidonDraw(Canvascanvas){

super.onDraw(canvas);

Log.v(RoundSeekbarView,onDraw);

//paint.setColor(Color.RED);//在onDraw()里设置颜色就会起效

paint.setStrokeWidth(100);

canvas.drawLine(100,0,100,100,paint);

paint.reset();

Log.v(RoundSeekbarView,onDrawend);

}

我在构造函数中设置的画笔颜色是红色,但是实际画出的线是黑色的(画笔默认颜色是黑色),分析了一下发现是paint.reset()的问题,reset就是画笔重置设置嘛,如何它就会变成默认的黑色,这个我懂,可是为什么会把线的颜色改了?画线的代码明明在reset的前面。

分析

通过打日志分析发现onDraw()方法被执行了两次,也就是画笔(红)画了一次----画笔reset(变回默认颜色黑色了)----又执行了onDraw,黑笔画了一次,覆盖了原来的红线。

因此最后看到的颜色会是黑色,所有有关画笔的设置还是写在onDraw()里好一点。

目前不知道为什么onDraw()为什么会执行两次,有没有大佬可以赐教。

显示全部
相似文档