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

当返回到具有自定义视图的活动时,无效无法调用onDraw

是因为onDraw方法是在View的绘制过程中被调用的,而当返回到具有自定义视图的活动时,系统会重新绘制视图层级,此时会调用onDraw方法来进行视图的绘制操作。

如果无法调用onDraw方法,可能是由于以下几个原因:

  1. 视图没有被正确添加到活动中:确保自定义视图已经被正确添加到活动的布局中,并且已经通过findViewById方法获取到了对应的视图对象。
  2. 视图的尺寸为0:如果自定义视图的宽度或高度为0,那么绘制操作将无法进行。可以通过在布局文件中设置视图的宽高属性,或者在代码中使用setLayoutParams方法设置视图的宽高。
  3. 视图的可见性被设置为不可见:如果自定义视图的可见性被设置为不可见(View.INVISIBLE或View.GONE),那么绘制操作也无法进行。可以通过调用setVisibility方法将视图设置为可见状态。
  4. 视图的背景色与活动背景色相同:如果自定义视图的背景色与活动的背景色相同,那么绘制操作可能会被掩盖,导致无法看到绘制的效果。可以尝试修改自定义视图的背景色,或者在绘制时使用不同的颜色。

如果以上方法都无法解决问题,可以尝试重写onDraw方法,并在其中添加日志输出,以便查看是否被调用。另外,还可以检查是否存在其他与绘制相关的方法或属性被错误地修改或覆盖,导致无法调用onDraw方法。

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

  • 腾讯云云服务器(CVM):提供弹性计算服务,满足不同规模业务的需求。产品介绍链接
  • 腾讯云云数据库MySQL版:提供稳定可靠的云数据库服务,支持高可用、备份恢复等功能。产品介绍链接
  • 腾讯云人工智能平台(AI Lab):提供丰富的人工智能服务和开发工具,帮助开发者构建智能化应用。产品介绍链接
  • 腾讯云物联网套件(IoT Hub):提供全面的物联网解决方案,包括设备接入、数据管理、消息通信等功能。产品介绍链接
  • 腾讯云移动推送(TPNS):提供高效可靠的移动推送服务,帮助开发者实现消息推送功能。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android开发笔记(二十二)瀑布流网格WaterfallGridView

    Android中展示门类信息一般使用列表视图ListView或者网格视图GridView,特别是电商类APP的首页,除了顶部导航、底部标签、上方横幅外,主要页面都是展示各种商品和活动的网格视图。一般情况下GridView就够用了,不过GridView中规中矩,每个网格的大小都是一样的,有时显得有些死板。比如不同商品的外观尺寸很不一样,冰箱是高高的在纵向上长,空调则是在横向上长,所以若用一样规格的网格来展示,必然有的商品图片被压缩得很小。再比如像新闻摘要,每篇摘要的字数都不一样,为了把文字显示完全,也需要对每个网格自适应高度,字数多的网格分配较小的高度,字数较多的网格分配较大的高度。可惜GridView不支持自适配网格高度,所以我们得自己写个瀑布流网格控件来实现这样的效果了。 先来理下瀑布流控件的思路,因为GridView每个网格的宽和高都是一样的,所以无法基于GridView进行改造。如果是ListView,每行高度一样,一行内每个元素的长度是可以自定义的,但每列元素的长度必须一样,所以改造ListView的效果也很有限。改造GridView也不行,改造ListView也不行,看来得换个思路了,把复杂问题简单化试试。例如这个页面上只有四个视图:左上区块0、右上区块1、左下区块2、右下区块3,直接用布局文件xml编写的话也不难,可能大家多半会想到采用相对布局RelativeLayout来处理。

    06

    深度学习springMVC(五)一篇文章讲清楚 SpringMVC的视图解析器和 自定义视图解析器(看不懂你打我)

    我们在使用了SpringMVC后,对于请求的处理由以前我们自己声明 Servlet处理,变为声明单元方法来处理。请求处理完成之后,需要将 处理结果响应给浏览器 ,响应方式有直接响应,请求转发,重定向。对于 请求转发和重定向,我们在单元方法中是通过返回值来告诉 DispatcherServlet如何进行此次请求的响应。而方法的返回值只有一个,所 以,我们就需要在返回值值中声明指定的关键字,让DispatcherServlet可以 通过关键字来区分是请求转发还是重定向,那么DispactherServlet底层是 如何来实现请求转发和重定向的区分的呢?

    03

    Kotlin入门(24)如何自定义视图

    Android提供了丰富多彩的视图与控件,已经能够满足大部分的业务需求,然而计划赶不上变化,总是有意料之外的情况需要特殊处理。比如PagerTabStrip无法在布局文件中指定文本大小和文本颜色,只能在代码中通过setTextSize和setTextColor方法来设置。这用起来殊为不便,如果它能像TextView那样直接在布局指定文本大小和颜色就好了;要想让PagerTabStrip支持该特性,就得通过自定义视图来实现,而自定义视图的第一种途径便是自定义属性。 仍旧以翻页标题栏PagerTabStrip举例,现在给它新增两个自定义属性,分别是文本颜色textColor,以及文本大小textSize。下面给出Java编码的自定义步骤: 1. 在res\values目录下创建attrs.xml,文件内容如下所示,其中declare-styleable的name属性值表示新视图的名称,两个attr节点表示新增的两个属性分别是textColor和textSize:

    03

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

    在自定义视图中,有三个函数可以重写用于界面绘制,在视图创建过程中,三个函数的执行顺序依次是:onLayout、onDraw、dispatchDraw。 1、onLayout(boolean changed, int left, int top, int right, int bottom) :  onLayout用于定位该视图在上级视图中的位置,从其参数中就可以看出来。由于该函数没有画布,因此只适合绘制现成的视图控件。 2、onDraw(Canvas canvas) :  自定义控件一般是重写onDraw方法,在画布中绘制各种图形。 3、dispatchDraw(Canvas canvas) :  dispatchDraw与onDraw的区别在于:onDraw在绘制下级视图之前,而dispatchDraw在绘制下级视图之后,所以如果不想自己的绘图被下级视图覆盖的话,就要在dispatchDraw中进行绘制操作。为方便记忆,只要是从ViewGroup衍生出的视图,都用dispatchDraw,其他小控件都用onDraw。

    03

    C# WPF MVVM开发框架Caliburn.Micro 自定义Conventions⑩

    虽然ViewLocator和ViewModelLocator类通过提供对每个类的NameTransformer实例的公共访问来支持非标准约定,但对于那些不熟悉正则表达式语法的人来说,添加基于正则表达式的新名称转换规则可能是一项艰巨的任务。此外,由于NameTransformer设计用于执行通用名称转换,因此它不允许单独定制名称和名称空间转换。换句话说,没有简单的方法可以在维护名称空间的标准转换的同时添加对自定义视图名称后缀的支持,也没有简单的方法可以在维护类型名称的标准转换的同时更改名称空间转换。认识到这些局限性,我们为每个定位器类添加了可配置性和几个高级方法。这些新特性允许为常见用例构建自定义转换规则,而无需了解正则表达式。此外,这些方法是领域感知的(即它们考虑了名称空间和类型名称的概念),而不是面向泛型名称转换。

    02

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

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

    01
    领券