首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么View上的` `onDraw()`方法接收可以为空的画布

View上的onDraw()方法接收可以为空的画布是因为在绘制过程中,有时候我们只需要计算和处理一些绘制相关的数据,而不需要实际绘制到画布上。这样设计的好处是可以提高绘制的效率和灵活性。

具体来说,onDraw()方法是在View需要进行绘制时被调用的。它接收一个Canvas对象作为参数,用于绘制图形和文字等内容。但是,并不是每次调用onDraw()方法都需要实际绘制到画布上,有时候我们只需要进行一些计算、数据处理或者其他操作,而不需要绘制任何内容。

这种设计的优势在于:

  1. 提高绘制效率:如果每次调用onDraw()方法都要进行实际的绘制操作,无论是否有内容需要绘制,都会增加绘制的开销。而允许画布为空,可以避免不必要的绘制操作,提高绘制的效率。
  2. 灵活性:允许画布为空,可以让开发者根据需要自由选择是否进行绘制操作。例如,在某些情况下,我们可能只需要计算一些绘制相关的数据,而不需要实际绘制到画布上,这样可以更灵活地处理绘制逻辑。

应用场景:

  1. 自定义View:在自定义View的开发中,我们经常需要重写onDraw()方法来实现自定义的绘制效果。有时候,我们可能只需要进行一些数据计算或者其他操作,而不需要实际绘制到画布上。
  2. 动态绘制:在一些动态绘制的场景中,我们可能需要根据不同的条件来决定是否进行绘制操作。允许画布为空可以让我们更灵活地控制绘制的时机和内容。

推荐的腾讯云相关产品和产品介绍链接地址:

腾讯云提供了一系列云计算相关的产品和服务,包括云服务器、云数据库、云存储等。具体可以参考腾讯云官方网站的相关文档和产品介绍页面:

  1. 腾讯云官方网站:https://cloud.tencent.com/
  2. 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  3. 腾讯云云数据库(CDB):https://cloud.tencent.com/product/cdb
  4. 腾讯云云存储(COS):https://cloud.tencent.com/product/cos
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

3.3 自定义控件基础 之 View的绘制

一般情况下,可以使用重写View类中的onDraw()方法来绘图,onDraw()中有一个参数,就是Canvas canvas对象。...这是因为传进去的bitmap与通过这个bitmap创建的Canvas画布是紧紧联系在一起的,这个过程我们称之为装载画布。 这个bitmap用来存储所有绘制在Canvas上的像素信息。...在View类的onDraw()方法中,通过下面这段代码,我们可以了解到canvas与bitmap直接的关系。首先在onDraw方法中绘制两个bitmap,代码如下所示。...mCanvas.drawXXX 通过mCanvas将绘制效果作用在了bitmap2上,再刷新View的时候,就会发现通过onDraw()方法画出来的bitmap2已经发生变化,这就是因为bitmap2承载了在...虽然我们也使用了Canvas的绘制API,但其实并没有将图形直接绘制在onDraw()方法指定的那块画布上,而是通过改变bitmap,然后让View重绘,从而显示改变之后的bitmap。

46640

一种android中实现“圆角矩形”的方法

内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角。...canvas,就是改变了画布的可绘制区域。...这里不严谨的认为:每个layer是一个canvas(画布),画布关联一个Bitmap存储最终绘制的内容。实际上不像现实中的画布或画纸,Canvas更像一个“绘图工具集”,包含直尺,圆规等绘图工具。...上面的代码中,onDraw()方法在新的layer中使用Xfermode绘图模式来画圆和矩形。...,Xfermode模式下后续drawBitmap()方法会以当前layer的“整个区域的内容”作为混合操作的参考bitmap,所以为了不让之前layer已有内容对混合产生影响,就使用一个全新的layer

3.6K70
  • Carson带你学Android:自定义View Canvas类使用教程

    简介 定义:画布,是一种绘制时的规则 是安卓平台2D图形绘制的基础 作用:规定绘制内容时的规则 & 内容 记住:绘制内容是根据画布的规定绘制在屏幕上的 理解为:画布只是绘制时的规则,但内容实际上是绘制在屏幕上的...总结 绘制内容是根据画布的规定绘制在屏幕上的 内容实际上是绘制在屏幕上; 画布,即Canvas,只是规定了绘制内容时的规则; 内容的位置由坐标决定,而坐标是相对于画布而言的 注:关于对画布的操作(缩放...Canvas的使用 4.1 对象创建 & 获取 Canvas对象 & 获取的方法有4个: // 方法1 // 利用空构造方法直接创建对象 Canvas canvas = new Canvas(); /.../ 方法3 // 通过重写View.onDraw()创建Canvas对象 // 在该方法里可以获得这个View对应的Canvas对象 @Override protected void onDraw...绘制方法使用 利用Canvas类可绘画出很多内容,如图形、文字、线条等等; 对应使用的方法如下: 仅列出常用方法,更加详细的方法可参考官方文档 Canvas 下面我将逐个方法进行详细讲解 特别注意

    2.4K10

    Canvas类的最全面详解 - 自定义View应用系列

    总结 绘制内容是根据画布的规定绘制在屏幕上的 内容实际上是绘制在屏幕上; 画布,即Canvas,只是规定了绘制内容时的规则; 内容的位置由坐标决定,而坐标是相对于画布而言的 注...Canvas的使用 4.1 对象创建 & 获取 Canvas对象 & 获取的方法有4个: // 方法1 // 利用空构造方法直接创建对象 Canvas canvas = new...(bitmap) // 方法3 // 通过重写View.onDraw()创建Canvas对象 // 在该方法里可以获得这个View对应的Canvas对象 @Override protected...绘制方法使用 利用Canvas类可绘画出很多内容,如图形、文字、线条等等; 对应使用的方法如下: 仅列出常用方法,更加详细的方法可参考官方文档 Canvas ?...(Color.BLUE); // ... } } 具体为什么,请看我写的自定义View原理系列文章: 自定义View Measure过程 - 最易懂的自定义View原理系列(2)

    3.2K81

    用Kotlin实现抖音爆红的文字时钟,征服产品小姐姐就靠它了(上)

    画布准备 基本是将画布背景填充黑色,然后将画布的原点移动到View大小的中心,这样方便思维理解与绘制。...方法将画布原点平移到中心位置 override fun onDraw(canvas: Canvas?)...} 其中要说一下mPaint.getBottomedY() mPaint.getToppedY(),这是两个扩展到Paint画笔上的两个kotlin方法。...该方法接收一个degrees: Float参数,是控制「时圈」整体的旋转的,后文就是不断改变该值,而产生动画效果的。 并且因为三个圈的动画方向都是逆时针,所以这个degrees是个始终会是个负数。...我们再看一下onDraw()中的代码,绘制三个圈的方法都会接收一个相应的degrees: Float参数,这个是控制一个圈的整体旋转的,而且要逆时针转,所以始终得是负数。

    1.2K10

    自定义View(九)-View的工作原理- View的layout()和draw()

    也就是说当setFrame()方法完成后,就基本上完成了当前View的布局。...这个是为什么设置View.GONE不会占用布局的原因。 必须要在布局完成后才能获取到调用getHeight()和getWidth()方法获取到的View的宽高否则为0。...已进入方法就提示了绘制的过程遵循以下6个步骤: 绘制当前视图的背景。 保存当前画布的堆栈状态,并且在在当前画布上创建额外的图层,以便接下来可以用来绘制当前视图在滑动时的边框渐变效果。...3.绘制视图View的内容onDraw 第三步是调用onDraw()方法绘制内容。发现是一个空的方法,也就是说所有View继承View的控件都要重写这个方法来实现对自己内容的绘制。...因为你想怎么实现什么样的效果View也不知道就只好给你一个空方法你自己去实现。

    2.9K20

    手把手教你读懂源码,View的绘制流程详细剖析

    View的onLayout方法 发现onLayout方法是空的,直接看DecorView的onLayout方法: ?...2.保存当前画布的堆栈状态,并且在当前画布上创建额外的图层,以便接下来可以用来绘制当前视图在滑动时的边框渐变效果。 3.绘制当前视图的内容。 4.绘制当前视图的子视图的内容。...首先需要计算出当前视图的左、右、上以及下内边距的大小,以便得到边框所要绘制的区域。 然后接着绘制当前视图的内容,调用了onDraw方法: ?...View的onDraw方法 发现该方法为空,主要在子类中实现,继续看DecorView的onDraw方法: ?...View的dispatchDraw方法 发现该方法为空,真正的实现在ViewGroup中: ?

    1.3K100

    Android开发笔记(十三)视图绘制的几个方法

    三个可进行绘制的方法 在自定义视图中,有三个函数可以重写用于界面绘制,在视图创建过程中,三个函数的执行顺序依次是:onLayout、onDraw、dispatchDraw。...由于该函数没有画布,因此只适合绘制现成的视图控件。 2、onDraw(Canvas canvas) :  自定义控件一般是重写onDraw方法,在画布中绘制各种图形。...下面列出Canvas的常用方法: 划定可绘制的区域(裁剪区域) 虽然本视图内的所有区域都是可以绘制的,但是有时候我们还是只想在某个圆形区域或者矩形区域内部画画,那么在绘制之前就得指定允许绘制的区域大小...rotate : 旋转画布 scale : 缩放画布 translate : 平移画布 存取画布的状态 Canvas的不同绘制操作会互相影响,比如说我们想对整个画布做旋转,除了某个直线...save : 保存画布状态 restore : 恢复画布状态 画笔Paint的使用 在上述绘制图形函数当中,都需要指定Paint,Paint上定义了画笔的颜色、样式、粗细、阴影、下划线等等

    1.2K30

    Android-2D绘图

    Canvas:画布,用来直接在View上绘制诸如矩形,圆形,文字,位图等图形。...这里重载了onDraw方法,在其中使用setColor方法来设置画笔为红色,接着使用该画笔在Canvas画布上绘制了直线和矩形。...这段代码同时也演示了Android中绘图操作的流程,一般是通过重载View类中的onDraw方法来实现的。...接着设置画笔的线宽以及空心效果,这样将绘制出空心矩形。最后,调用drawRect方法在画布上绘制了一个矩形,调用drawRoundRect方法在画布上绘制了一个圆角矩形。 ?...最后,调用drawText方法在画布上绘制字符串。 ? ---- rotate方法:旋转画布 【功能说明】该方法用于旋转画布,通过旋转画布,可以将画布上绘制的对象旋转。

    5.1K20

    Android中初步自定义view

    开头,一般开发工具会提示你添加命名空间 xmlns:custom="http://schemas.android.com/apk/res-auto" 把这句话添加在根节点下,到现在,你就可以为你的view...即需要重写onMeasure和onDraw方法。 这样整体来看,其实自定义view也不是很麻烦。...总结下来就是 第一,先定义自己的view类 第二,创建资源文件添加view的属性 第三,在onMeasure方法中测量view所需要显示的大小 第四,在onDraw中借助画笔和画布把view绘制出来。...(CustomViewSec.java:76) at android.view.View.draw(View.java:16207) 刚开始怎么也想不明白,明明创建了Paint的对象,为什么还会为...问题解决 问题2,绘制上发现所自定义的 view进行了全屏显示,打开手机上显示布局边界的功能之后可以发现我所自定义的view进行了全屏显示,占据了一个界面上父view所剩余的所有空间。 ?

    60570

    自定义View学习——三种实现方式

    文章解释 3、自绘控件:新建类通过继承View或ViewGroup生成新控件,这种控件可以说是最难的一种了;在自定义控件内部,通过画笔(Paint)和画布(Canvas)绘制控件,需要掌握绘图知识,事件分发...但在ViewGroup中,当它有背景的时候就会调用onDraw()方法,否则就会跳过onDraw()直接调用dispatchDraw();所以如果要在ViewGroup中绘图时,往往是重写dispatchDraw...()方法。...3、在View的onDraw中super.onDraw(canvas)和super.dispatchDraw(canvas)都是一个空实现,无影响;但是在ViewGroup中super.onDraw(canvas...)和super.dispatchDraw(canvas)相反都为非空实现,如果先做super.dispatchDraw(canvas),再做其它绘图操作的结果是:先把子View绘制出来,然后再画你的绘画操作

    76330

    Android查缺补漏(View篇)--自定义 View 的基本流程

    在自定义 View 时我们也正是在 onDraw() 方法内可以在 Canvas 画布上随心所欲的画出我们想要的 View。...直接继承 View 来实现自定义 View 的这种方式比较灵活,可以实现很多复杂的效果,这种方式最关键的步骤就是重写 onDraw() 方法,通过 Paint 画笔等工具在 Canvas 画布上进行各种图案的绘制以达到我们想要的效果...其实在自定义 View 过程中,难点往往不是怎么使用画笔本身,而是绘制出预期效果的思路,例如:你想通过自定义 View 来做一个折线图控件,传入一组数据怎么确定这些数据在画布上对应点的相对坐标,而确定点的坐标就需要通过相关的数学公式来计算了...新建一个继承 View 的类,添加构造方法,设置 Paint 画笔,重写 onDraw() 方法,先在画布上以最简单的方式话一个半径为100的圆。...感兴趣的童鞋可自行动手试一试。 在上面代码中通知 View 重绘时使用了 invalidate() 方法,其实 postInvalidate() 也可以通知 View 重绘,那么这两者有什么区别呢?

    858100

    Android RecyclerView之粘性头部+点击事件

    如下图所示: #######onDraw(Canvas c, RecyclerView parent, State state) 这个方法可以实现类似绘制背景的效果,绘制的东西是显示在item的下层,一般配合...: 上面上个方法的调用顺序依次为:getItemOffsets(),onDraw(),onDrawOver(); getItemOffsets()针对每一个item,它调用的次数即为屏幕上绘制item...的个数; onDraw(),onDrawOver()方法针对 RecyclerView本身,初始化只会调用一次; 当滑动列表至第10条的过程中,可以看到onDraw(),onDrawOver()...我们先看下这两个方法在 RecyclerView中调用位置,从下面也可以看得出来decoration 的onDraw(),child view 的 onDraw(),decoration 的 onDrawOver...这样就会调用RecyclerView的onDraw(),onDrawOver()方法,因此ItemDecoration的这两个方法就在不断的调用。

    4.5K40

    Android自定义控件(高手级)--JOJO同款能力分析图

    看不懂的可转到canvas和path,如果看了这两篇还问绘制有什么技巧的,可转到这里,会告诉你技巧是什么 内圈绘制.png /** * 绘制内圈圆 * @param canvas 画布 *...else if (mark 0) { return mMarkMapper[4]; } return "∞"; } 4.最后一步:画内容 本以为就连个点的事...,没想到...打了我半页草稿纸(手动表情--可怕) 展现在你眼前的就是个for循环而已,实际上都是通过一点点分析,测试与发现规律算出来的 有什么技巧?...二、数据的提取与封装 刚才用的是测试数据,都写死在View中,这肯定是不行的 现在将数据封装一下,再暴露接口方法,打开View和外界的通路 1.View的尺寸限定 使用宽度作为直径,无视高度,...:WordMapper 也就是刚才在View里写的那个方法 /** * 作者:张风捷特烈 * 时间:2018/12/28 0028:12:24 * 邮箱:1981462002

    74230

    锦囊篇|Android自定义View

    文章内部分图片来源:Carson_Ho大佬的文章 View工作流程 measure 等等通过layout中的第二张图我们就会知道控件大小的计算方法了。...因为直接继承自View的控件使用wrap_cotent和match_parent是显示出来的效果是相同的。需要我们使用MeasureSpec中的getMode()方法来对当前的模式进行区分和比较。...(saveCount); 绘制装饰,比如滚动条 -- onDrawForeground(canvas); 关于开发者需要重写的方法一般是第三步绘制View的内容对应的onDraw()。...但是看过了源码的读者估计会问一个问题,为什么我要创建一个DBitmap来完成这个任务?...Canvas操作 在使用之前需要注意,画布是需要保存的,不然画布将不断的保留上一次的状态进行绘制,那整体就会呈现一种叠加混乱的局面。而这个方法就是save()和restore()的成对使用。

    44230

    从自定义时钟⏰了解draw流程

    ()方法中,就开始了一系列绘制方法: 1、绘制背景 2、保存图层信息 3、绘制内容(onDraw) 4、绘制children 5、绘制边缘 6、绘制装饰 其中,第三步也就是我们自定义View必用的onDraw...方法,在该方法中,需要我们绘制View本身的内容。...接下来,我们就重点看看这个onDraw方法。怎么看?像上次一样,我们实现一个自定义View——时钟⏰View 自定义时钟View 构思 首先,给大家看看我们最终需要完成的效果图: ?...对于刻度的绘画,用到的就是drawline方法,不同的刻度可以通过rotate旋转画布的坐标系来实现。...比如上述的canvas.rotate方法,在这之前需要调用save保存画布的原始状态,最后在调用restore方法恢复画布,完整调用链如下: canvas.save() //... canvas.rotate

    64030
    领券