当前位置:   article > 正文

【Android】自定义View onDraw()方法会调用两次_如何在ondraw函数中调用自定义函数

如何在ondraw函数中调用自定义函数

问题

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

  1. public RoundSeekbarView(Context context, @Nullable AttributeSet attrs) {
  2. super(context, attrs);
  3. //布局引用调用的是两个参数的构造函数
  4. paint = new Paint(Paint.ANTI_ALIAS_FLAG);
  5. paint.setAntiAlias(true);
  6. paint.setDither(true);
  7. paint.setColor(Color.RED);
  8. }
  9. @Override
  10. protected void onDraw(Canvas canvas) {
  11. super.onDraw(canvas);
  12. Log.v("RoundSeekbarView", "onDraw");
  13. //paint.setColor(Color.RED); //在onDraw()里设置颜色就会起效
  14. paint.setStrokeWidth(100);
  15. canvas.drawLine(100, 0,100,100,paint);
  16. paint.reset();
  17. Log.v("RoundSeekbarView", "onDraw end");
  18. }

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

分析

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/711339
推荐阅读
相关标签
  

闽ICP备14008679号