首页
学习
活动
专区
工具
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像素信息。...在ViewonDraw()方法中,通过下面这段代码,我们可以了解到canvas与bitmap直接关系。首先在onDraw方法中绘制两个bitmap,代码如下所示。...mCanvas.drawXXX 通过mCanvas将绘制效果作用在了bitmap2,再刷新View时候,就会发现通过onDraw()方法画出来bitmap2已经发生变化,这就是因为bitmap2承载了在...虽然我们也使用了Canvas绘制API,但其实并没有将图形直接绘制在onDraw()方法指定那块画布,而是通过改变bitmap,然后让View重绘,从而显示改变之后bitmap。

45840

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

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

3.5K70
  • 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.3K10

    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)

    3K81

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

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

    1.2K10

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

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

    1.1K100

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

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

    2.9K20

    android使用Path绘制出多边形

    在讲使用path绘制多边形时,讲下Canvastranslate(),rotate()方法使用,本博客中会使用这方面的知识,先单独讲下,搞懂了这个,下面讲path绘制多边形就简单多,我们知道每次我们使用...activity压入栈中,translate()是画布平移,其实每次画布还是同一个画布,通过paint绘制图形都是在这同一个canvas,但是绘制内容跟你是否使用了translate()有关系,下面通过简单...上面的红点是坐标点(100,100)位置,为什么绘制蓝色文字是在坐标点(100,100)位置呢?...是因为你canvas使用了translate(100,100)也就是x,y坐标都平移了100px,这个是根据你当前view左上角坐标为原点进行平移,平移肯定是相对那个点进行平移,不人为去设置画布颜色...第二种: 配套使用canvas.save() canvas.restore() ;save()是绑定画布,restore()是让画布恢复到最初状态 @Override protected void onDraw

    1.3K20

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

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

    1.1K30

    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所剩余所有空间。 ?

    58970

    Android开发之自定义刮刮卡实现代码

    所涉及知识点: 1、自定义View一些流程 2、双缓冲绘图机制 3、Paint绘图模式 4、触摸事件一些流程 5、Bitmap相关知识 实现思路: 其实非常简单,首先我们需要确定所要绘图区域...); mForeCanvas.drawBitmap(mBitmap, 0, 0, null); 剩下利用Path来记录用户手指触摸路径就是一样了,这里我们额外来添加一个功能,使得当用户在刮刮卡区域范围超过...我们通过BitmapgetPixels方法就可以拿到Bitmap像素信息,由于这里涉及到了计算,这是个耗时操作,所以这里我们开启一个子线程来执行任务 private Runnable mRunnable...可以为负数 * x  从位图中读取第一个像素x坐标值。...可以为负数 * x  从位图中读取第一个像素x坐标值。

    70431

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

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

    74630

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

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

    833100

    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...这样就会调用RecyclerViewonDraw(),onDrawOver()方法,因此ItemDecoration这两个方法就在不断调用。

    4.3K40

    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

    71830
    领券