Android自定义View onDraw()方法会调用两次的问题解决
作者:新镜
这篇文章主要介绍了Android自定义View onDraw()方法会调用两次的问题解决,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
问题
自定义了View后,在构造函数中设置画笔颜色,发现它没起效,但是在onDraw()里设置颜色就会起效,出问题的代码如下:
public RoundSeekbarView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); //布局引用调用的是两个参数的构造函数 paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setAntiAlias(true); paint.setDither(true); paint.setColor(Color.RED); } @Override protected void onDraw(Canvas canvas) { 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", "onDraw end"); }
我在构造函数中设置的画笔颜色是红色,但是实际画出的线是黑色的(画笔默认颜色是黑色),分析了一下发现是paint.reset()的问题,reset就是画笔重置设置嘛,如何它就会变成默认的黑色,这个我懂,可是为什么会把线的颜色改了?画线的代码明明在reset的前面。
分析
通过打日志分析发现onDraw()方法被执行了两次,也就是画笔(红)画了一次---->画笔reset(变回默认颜色黑色了)---->又执行了onDraw,黑笔画了一次,覆盖了原来的红线。
因此最后看到的颜色会是黑色,所有有关画笔的设置还是写在onDraw()里好一点。
目前不知道为什么onDraw()为什么会执行两次,有没有大佬可以赐教。
到此这篇关于Android自定义View onDraw()方法会调用两次的文章就介绍到这了,更多相关Android自定义View onDraw()方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!