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

 更新时间:2024年01月22日 11:29:09   作者:新镜  
这篇文章主要介绍了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()方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Flutter实现按位置大小比例布局的控件

    基于Flutter实现按位置大小比例布局的控件

    做视频监控项目时需要需要展示多分屏,比如2x2、3x3、414等等,所以本文为大家介绍了如何基于Flutter实现按位置大小比例布局的控件,需要的可以参考一下
    2023-08-08
  • Android实现底部滚轮式选择弹跳框

    Android实现底部滚轮式选择弹跳框

    这篇文章主要为大家详细介绍了Android实现底部滚轮式选择弹跳框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Android组件实现长按弹出上下文菜单功能的方法

    Android组件实现长按弹出上下文菜单功能的方法

    这篇文章主要介绍了Android组件实现长按弹出上下文菜单功能的方法,结合实例形式分析了Android实现长按弹出上下文菜单的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • Android深入分析属性动画源码

    Android深入分析属性动画源码

    这篇文章主要给大家介绍了关于Android动画系列教程之属性动画的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Android异步消息处理机制实现原理详解

    Android异步消息处理机制实现原理详解

    这篇文章主要介绍了Android异步消息处理机制实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Android Flutter使用本地数据库编写备忘录应用

    Android Flutter使用本地数据库编写备忘录应用

    这篇文章主要为大家详细介绍了Android Flutter如何使用本地数据库实现编写简单的备忘录应用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-03-03
  • android中UI主线程与子线程深入分析

    android中UI主线程与子线程深入分析

    这篇文章主要介绍了android中UI主线程与子线程,以实例形式较为深入的分析了UI主线程与子线程的运行原理与操作技巧,有助于深入了解Android程序设计,需要的朋友可以参考下
    2015-02-02
  • Android CoordinatorLayout详解及实例代码

    Android CoordinatorLayout详解及实例代码

    这篇文章主要介绍了Android CoordinatorLayout详解及实例代码的相关资料,CoordinatorLayout基本实现两个功能: 作为顶层布局 和调度协调子布局,这里详细介绍此部分知识,需要的朋友可以参考下
    2016-12-12
  • Android高性能日志写入方案的实现

    Android高性能日志写入方案的实现

    这篇文章主要给大家介绍了关于Android高性能日志写入方案的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • TabLayout用法详解及自定义样式

    TabLayout用法详解及自定义样式

    这篇文章主要介绍了TabLayout用法详解及自定义样式的相关资料,需要的朋友可以参考下
    2017-01-01

最新评论