首页
学习
活动
专区
工具
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):提供高效可靠的移动推送服务,帮助开发者实现消息推送功能。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

图像处理程序框架—MFC相关知识点

OnDraw()是CVIEW成员函数,没有响应消息功能.视图变得无效(包括大小改变,移动,被遮盖等等),Windows发送WM_PAINT消息。...MFC提供了CPaintDC类和CWindwoDC类来实时响应,而CPaintDC支持重画。视图变得无效(包括大小改变,移动,被遮盖等等),Windows 将 WM_PAINT 消息发送给它。...OnPaint中只是窗口无效重绘不会保留CClientDC绘制内容。 ...默认 OnUpdate 实现使视图整个工作区无效视图变得无效,Windows 将 WM_PAINT 消息发送给它。...没有添加WM_PAINT消息处理,窗口重绘,由OnDraw来进行消息响应...添加WM_PAINT消息处理,窗口重绘,WM_PAINT消息被投递,由OnPaint来进行消息响应.这时就不能隐式调用

1.5K20

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

匹配父容器,测量模式为MeasureSpec.EXACTLY,测量大小直接为屏幕大小,也就是充满真个屏幕; 包裹内容,测量模式为MeasureSpec.AT_MOST,测量大小直接为屏幕大小,...ViewRoot类成员变量mPrivateFlagsFORCE_LAYOUT位不等于0,就表示当前视图正在请求执行一次布局操作,这时候方法就需要重新测量当前视图宽度和高度。...当前视图距离父视图边距一旦设置好之后,它就是一个具有边界视图了。...DecorViewonDraw方法 当前视图内容绘制完成后,接着绘制子视图内容,调用了dispatchDraw方法。 ?...因此在自定义View时候都一般都需要重写父类onDraw方法来实现View内容绘制。 简单总结概括一下,draw时序图如下: ?

1.1K100
  • Android高频面试专题 - 提升篇(二)View绘制流程

    View可见性为VISIBLE时候,ViewonDraw()方法将会被调用,invalidate()方法在 UI 线程中调用,重绘当前 UI。...view确定自身已经不再适合现有的区域,该view本身调用这个方法要求parent view(父类视图)重新调用onMeasure、onLayout来重新设置自己位置。...特别是viewlayoutparameter发生改变,并且它值还没能应用到view上,这时候适合调用这个方法requestLayout()。...10、onDraw() 和dispatchDraw()区别 绘制View本身内容,通过调用View.onDraw(canvas)函数实现 绘制自己孩子通过dispatchDraw(canvas)实现...值得注意是ViewGroup容器组件绘制,它没有背景直接调用是dispatchDraw()方法, 而绕过了draw()方法,它有背景时候就调用draw()方法,而draw()方法里包含了dispatchDraw

    9.3K31

    Android自定义控件总结

    在主线程中 拿到view调用Invalide()方法,刷新当前视图,导致执行onDraw执行,如果是在子线程用postinvalidate,或者不需要一直刷新用postinvalidateDelayed...事件冲突 点击事件发生,事件最先传递给Activity,Activity会首先将事件将被所属Window进行处理,即调用superDispatchTouchEvent()方法。...,都不处理向上传,回到顶级,若顶层(activity)也不对此事件进行处理,此事件相当于消失了(无效果)。...(只有在自定义ViewGroup中才用到),这个坐标是相对于当前视图视图而言。...,都不处理回到顶级父空间,若顶层(activity)也不对此事件进行处理,此事件相当于消失了(无效果)。

    99311

    Android自定义控件总结

    在主线程中 拿到view调用Invalide()方法,刷新当前视图,导致执行onDraw执行,如果是在子线程用postinvalidate,或者不需要一直刷新用postinvalidateDelayed...事件冲突 点击事件发生,事件最先传递给Activity,Activity会首先将事件将被所属Window进行处理,即调用superDispatchTouchEvent()方法。...,都不处理向上传,回到顶级,若顶层(activity)也不对此事件进行处理,此事件相当于消失了(无效果)。...(只有在自定义ViewGroup中才用到),这个坐标是相对于当前视图视图而言。...,都不处理回到顶级父空间,若顶层(activity)也不对此事件进行处理,此事件相当于消失了(无效果)。

    1.3K80

    035android初级篇之androidViewGroup与View

    视图绘制时会先绘制子控件。如果视图背景可见,视图会在调用onDraw函数之前绘制背景。强制重绘,可以使用invalidate()。...如果requestLayout()或invalidate()有一个被调用,框架会对视图树进行相关测量、布局和绘制。 注意,视图树是单线程操作,直接调用其它视图方法必须要在UI线程里。...public void invalidate() 此函数将调用onDraw,强制重绘。...public void requestLayout() 某些东西发生改变后,当前View层次结构无效了,调用此函数对View层次结构进行重新布局。...我们也可以自定义自己布局,以方便日后使用和维护,这时我们就需要继承ViewGroup类并在派生类中重写ViewGroup一些方法.

    54630

    Android CheckBox中设置padding无效解决办法

    使用本地资源图片很简单,设置android:button属性为一个自定义包含selectordrawable文件即可。...先看上下padding,设置上下padding,由于文字本身距离上下边界就有一定距离,如果padding值设置不够,整个CheckBox区域根本不会变化,通过设置较大padding值可以实现扩大...再看左右padding,设置左右padding,无论是左padding还是右padding,影响只是文字位置。图片始终都在整个CheckBox左侧,对图片来说,增大都是右侧区域。...所以设置左右padding不能解决CheckBox点击响应问题,不仅会导致图片位置偏左,还会出现点击左侧区域无法点中情况。...,要想解决CheckBox点击响应问题似乎唯一方法就是重写一个新控件,然后在onDraw方法中确定图片位置把padding也考虑进去。

    2.3K20

    View绘制流程

    视图必须确保它自己所有子视图可以适应在该尺寸范围内,对应属性为 wrap_content,这种模式下,父控件无法确定子 View 尺寸,只能由子控件自己根据需求去计算自己尺寸,这种模式就是我们自定义视图需要实现测量逻辑情况...View/ViewGroup 对象 onMeasure()方法,因此自定义视图,只需要复写 onMeasure() 方法即可。...在自定义视图中,也不应该复写该方法,而是复写 onDraw(Canvas) 方法进行绘制,如果自定义视图确实要复写该方法,那么请先调用 super.draw(canvas)完成系统绘制,然后再进行自定义绘制...View.onDraw(): View onDraw(Canvas)默认是空实现,自定义绘制过程需要复写方法,绘制自身内容。 dispatchDraw() 发起对子视图绘制。...requestLayout() 布局变化时候,比如方向变化,尺寸变化,会调用该方法,在自定义视图中,如果某些情况下希望重新测量尺寸大小,应该手动去调用该方法,它会触发measure()和layout

    83550

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

    ---- 都说学习自定义View开发都是:动画->绘图->事件分发->自定义布局(View绘制过程)->自定义控件;由此学习是一个我认为比较愉快学习方向。...2、onDraw、dispatchDraw区别           onDraw()意思是绘制视图自身,dispatchDraw()是绘制子视图,无论是View还是ViewGroup对它们俩调用顺序都是...但在ViewGroup中,它有背景时候就会调用onDraw()方法,否则就会跳过onDraw()直接调用dispatchDraw();所以如果要在ViewGroup中绘图,往往是重写dispatchDraw...在View中,onDraw()和dispatchDraw()都会被调用,所以我们无论把绘图代码放在onDraw()或者dispatchDraw()中都是可以得到效果,但是由于dispatchDraw...()含义是绘制子控件,所以原则来上讲,在绘制View控件,我们是重写onDraw()函数 得出结论:在绘制View控件,需要重写onDraw()函数,在绘制ViewGroup,需要重写dispatchDraw

    75530

    突破自定义View性能瓶颈

    在本篇文章中,我们将探讨一些Android自定义View性能优化技巧,以确保您应用程序在处理自定义View保持高效和稳定。我们将从以下几个方面进行讨论: 1....例如,如果您需要创建一个具有多个子视图自定义View,使用ConstraintLayout代替RelativeLayout和LinearLayout可以简化布局并减少嵌套。...ViewStub是一个轻量级视图,它可以用作占位符,直到需要真正视图才充气。这可以大大减少布局层次结构并提高性能。 2. 缓存视图 缓存视图是另一个重要性能优化技巧。...您使用自定义View,通常需要创建多个实例。如果您没有正确地缓存这些实例,那么您应用程序可能会变得非常慢。 为了缓存视图,您可以使用AndroidViewHolder模式或使用自定义缓存对象。...通过使用正确布局,缓存视图,避免过多绘制操作,使用异步任务和适当数据结构,您可以确保您应用程序在处理自定义View保持高效和稳定。 请记住,优化自定义View性能是一个持续过程。

    23730

    自定义View必备知识-View绘制流程

    可以调用setEnable()方法来改变视图可用状态,传入true表示可用,传入false表示不可用。 它们之间最大区别在于,不可用视图无法响应onTouch事件。...isFocused() 当前视图是否获得焦点 通常情况下有两种方法可以让视图获得焦点,即通过键盘上下左右键切换视图,以及调用requestFocus()方法。...从View测量、布局和绘制原理来看,要实现自定义View,根据自定义View种类不同,可能分别要自定义实现不同方法。...onDraw()方法:无论单一View,或者ViewGroup都需要实现该方法,因其是个空方法 自定义View优化策略 为了加速你view,对于频繁调用方法,需要尽量减少不必要代码。...还需要尽可能减少onDraw调用次数,大多数时候导致onDraw都是因为调用了invalidate().因此请尽量减少调用invaildate()次数。

    1.7K30

    双十一推广大使额外奖励

    ;推广大使如使用上述非正当方式开展推广活动,腾讯云有权判定该等推广方式所带来活动推广结果无效,并冻结扣除佣金与额外奖励; 2、虚假、或夸大陈述腾讯云活动推广政策及优惠(如在其他平台以低于官网活动价形式进行推广售卖.../标记,以便在不同推广场景中投放不同标记链接; 2)推广效果支持筛选/跟踪不同推广位开单效果; 举例:需要在微信社群和知乎文章中同时推广双十一主会场活动,可自定义标记主会场链接A投放于社群,主会场链接...并在【推广效果】模块筛选追踪 链接A和链接B 点击-关联-佣 开单效果 2、自定义推广位操作指引 1)前往【推广素材】,点击任一活动【复制链接】 点击【自定义标记推广位】 完成分类/自定义标记,...点击【确认并复制推广链接】,即成功生成了已自定义标记推广链接 PS:若不想自定义标记推广位置,则前往【推广素材】>> 点击任一活动【复制链接】>>立即粘贴分享,即成功生成不标记推广链接 2)前往【推广效果...,需在活动有效期内主动领取任务,若推广达标但在活动结束前未领取任务,则无法统计和获得额外奖励 >>立即前往领取任务 2、奖励发放:额外奖励现金及抽奖红包将随11月月结佣金合并打款发放,到账时间和金额根据

    4.2K70

    android 自定义控件那些事

    onDraw() view中onDraw()是个空函数,也就是说具体视图都要覆写该函数来实现自己绘制。...其他需要注意方法 onKeyUp(): 松开某个键盘 onTrackballEvent(): 发生轨迹球事件 onSizeChange(): 该组件大小被改变 onFinishInflate...():回调方法,当应用从XML加载该组件并用它构建界面之后调用方法 onWindowFocusChanged(boolean): 该组件得到、失去焦点 onAttachedToWindow():...把该组件放入到某个窗口 onDetachedFromWindow():把该组件从某个窗口上分离触发方法 onWindowVisibilityChanged(int): 包含该组件窗口可见性发生改变触发方法...requestLayout() 布局变化时候,比如方向变化,尺寸变化,会调用该方法,在自定义视图中,如果某些情况下希望重新测量尺寸大小,应该手动去调用该方法,它会触发measure()和layout

    70680

    android开发仿iosUIScrollView实例代码

    = getChildAt(0); } } 这个属性我也是刚知道没多久,意思是所有的布局呈现完成之后调用这个方法。...自定义 View常用方法:   onFinishInflate() View中所有的子控件 均被映射成xml后触发    onMeasure(int, int) 确定所有子元素大小    onLayout...onWindowFocusChanged(boolean) 窗口包含view获取或失去焦点触发 onAttachedToWindow() view被附着到一个窗口触发 onDetachedFromWindow...() view离开附着窗口触发,提示该方法和 onAttachedToWindow() 是相反。   ...onWindowVisibilityChanged(int) 窗口中包含可见view发生变化时触发 以上是View实现一些基本接口回调方法,一般我们需要处理画布显示,重写onDraw(Canvas

    1K10

    【Android从零单排系列四十五】《Android中自定义View实现方法》

    Android提供了各种内置视图组件(如Button、TextView、ImageView等),但有时候这些默认组件无法完全满足特定设计要求或功能需求。...实现复杂绘制操作:自定义视图类中onDraw()方法允许您使用Canvas对象进行绘制操作,例如绘制图形、文本、位图等,从而创建出独特UI元素。...添加自定义属性:通过在自定义视图类中定义自己属性,并在XML布局文件中使用这些属性,可以方便地为自定义视图提供更多定制选项。...// 绘制操作 } } 在自定义视图类中重写onDraw()方法,该方法用于执行自定义绘制操作。...考虑测量和布局:如果您自定义视图具有特定尺寸要求,可以重写onMeasure()方法来测量视图宽度和高度,并根据需要调整布局。

    38820

    Android自定义View实现方法,带你一步步深入了解View(四)

    通过 Android视图状态及重绘流程分析,带你一步步深入了解View(三) 这篇文章学习我们都已经知道,调用invalidate()方法会导致视图进行重绘,因此onDraw()方法在稍后就将会得到调用...既然CounterView是一个自绘视图,那么最主要逻辑当然就是写在onDraw()方法里了,下面我们就来仔细看一下。...只不过需要注意,自定义View在使用时候一定要写出完整包名,不然系统将无法找到这个View。...手指按下,会调用OnGestureListeneronDown()方法,在这里通过pointToPosition()方法来判断出当前选中是ListView哪一行。...手指快速滑动,会调用onFling()方法,在这里会去加载delete_button.xml这个布局,然后将删除按钮添加到当前选中那一行item上。

    1.2K90

    Invalidate介绍

    1、Invalidate介绍  void Invalidate( BOOL bErase = TRUE );   该函数作用是使整个窗口客户区无效。...窗口客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住窗口变成了前台窗口,那么原来被遮住部分就是无效,需要重绘。这时Windows会在应用程序消息队列中放置WM_PAINT消息。...视图类有一些例外,在视图OnPaint函数中调用OnDraw函数,实际重绘工作由OnDraw来完成。参数bErase为TRUE,重绘区域内背景将被擦除,否则,背景将保持不变。...调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息优先级很低,它需要等消息队列中其它消息发送完后才能被处理。...调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。

    39310

    5个Android自定义View深度面试题

    面试题目1:解释自定义View基本概念及其在Android开发中重要性。 解答: 自定义View是Android开发中一个核心概念,它允许开发者根据应用特定需求来创建新视图组件。...自定义View通常涉及继承View或其子类,并重写onMeasure、onLayout和onDraw等方法来定义视图行为和外观。...invalidate方法可以触发视图重绘,再次执行onDraw方法。 面试题目4:在自定义View中,如何使用onInterceptTouchEvent方法进行事件拦截?...这通常用于处理滑动手势,例如,自定义View可以横向滑动,需要拦截纵向滑动事件。 面试题目5:解释自定义View中事件消费流程。...解答: 在自定义View中,事件消费流程主要涉及到onTouchEvent方法。当用户触摸View,系统会调用这个方法,并传入一个MotionEvent对象。

    10810
    领券