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

尽管调用了onDraw,但LinearLayout仍未绘制

是因为LinearLayout是一个ViewGroup,它的绘制过程需要经过measure、layout和draw三个步骤。调用onDraw只是在绘制过程的最后一步中绘制自身的内容,但在此之前,LinearLayout需要先测量子View的大小、确定子View的位置,并将子View布局到正确的位置上。

具体来说,LinearLayout的绘制过程如下:

  1. Measure(测量):在measure过程中,LinearLayout会遍历所有的子View,并调用每个子View的measure方法,测量子View的宽高。子View的measure方法会根据子View的布局参数(LayoutParams)和父View的测量要求(MeasureSpec)来计算子View的宽高。
  2. Layout(布局):在layout过程中,LinearLayout会根据子View的测量结果和自身的布局参数,确定每个子View的位置。LinearLayout会按照垂直或水平方向依次布局子View,可以通过设置LinearLayout的orientation属性来指定布局方向。
  3. Draw(绘制):在draw过程中,LinearLayout会遍历所有的子View,并调用每个子View的draw方法,将子View绘制到屏幕上。而调用LinearLayout的onDraw方法只是在绘制过程的最后一步中绘制LinearLayout自身的内容。

因此,如果只调用了LinearLayout的onDraw方法,而没有经过measure和layout步骤,LinearLayout的子View将无法正确布局和绘制,导致LinearLayout仍未绘制。

对于这个问题,可以尝试以下解决方案:

  1. 确保LinearLayout的宽高不为0:LinearLayout的宽高不能为0,否则子View无法正确布局和绘制。可以通过设置LinearLayout的布局参数(LayoutParams)来指定宽高,或者在布局文件中为LinearLayout设置固定的宽高。
  2. 确保LinearLayout的子View正确添加:在代码中,需要将子View添加到LinearLayout中,可以使用LinearLayout的addView方法将子View添加到LinearLayout中。
  3. 确保LinearLayout的measure和layout方法被调用:在调用LinearLayout的onDraw方法之前,需要确保LinearLayout的measure和layout方法被调用。可以在父View的onMeasure和onLayout方法中调用LinearLayout的measure和layout方法,或者在调用LinearLayout的onDraw方法之前手动调用LinearLayout的measure和layout方法。

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

  • 腾讯云云服务器(CVM):提供弹性计算能力,满足各类业务需求。产品介绍链接
  • 腾讯云云数据库MySQL版:提供高性能、可扩展的MySQL数据库服务。产品介绍链接
  • 腾讯云对象存储(COS):提供安全、稳定、低成本的云端存储服务。产品介绍链接
  • 腾讯云人工智能(AI):提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等。产品介绍链接
  • 腾讯云物联网(IoT):提供全面的物联网解决方案,帮助连接和管理物联网设备。产品介绍链接
  • 腾讯云移动开发平台(MTP):提供一站式移动应用开发、测试、分发和运营服务。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android开发笔记(十四)圆弧进度动画CircleAnimation

    一个好看的APP,都有不少精致的动画效果。熟练运用各种动画技术,可让我们的APP灼灼生辉。Android在技术上把动画分为了三类,分别是帧动画FrameAnimation、补间动画TweenAnimation、属性动画,其中补间动画又分做五种:深浅动画AlphaAnimation、平移动画TranslateAnimation、缩放动画ScaleAnimation、旋转动画RotateAnimation、组合动画AnimationSet。网上对这些动画的说明资料有不少,所以博主就不打算介绍它们的基本用法了,还是说说另外的一些常用动画。 首先介绍的是圆弧进度动画,像我们下载文件或者是做其他什么事情,都想知道当前到什么进度了。在Windows下常用来表达的是细长的进度条,但在手机上因为屏幕限制,我们更喜欢展示圆形或弧形的进度圈。所以接下来说的便是这个进度圆圈的动画,同时也正好与上一节自定义视图的绘制方法结合起来,复习复习加深巩固。 绘制圆弧动画,主要思路在一段指定的时间内,持续间隔地绘制一个扇形或圆弧,如同放电影的原理那样,每秒连续播放二三十张图片,连起来整个画面就动了。 其次还要进行一些参数的设置,如设置该圆圈的位置、开始和结束的角度,以及转动的速率等等,还有画笔的颜色、粗细、样式等等。 另外为了区分处理背景和动画,我们还要处理背景视图(用于衬托动画)、前景视图(用于展示动画)。 剩下的就是在绘制的时候做好每帧之间的延迟时间,重绘视图可用invalidate和postInvalidate方法,延迟可用Thread.sleep和Handler.postDelayed方法。 实现代码不难,直接贴出来了

    01
    领券