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

Android - invalidate()不会在CustomView中调用我的onDraw

在Android开发中,invalidate()是一个用于触发视图重绘的方法。当我们调用invalidate()方法时,系统会自动调用视图的onDraw()方法来进行重绘操作。

然而,在CustomView中,如果我们发现invalidate()方法没有调用onDraw()方法,可能有以下几个原因:

  1. 自定义视图的绘制逻辑有问题:首先,我们需要确保自定义视图的onDraw()方法被正确实现。在onDraw()方法中,我们应该编写绘制视图的代码,包括绘制背景、绘制文本、绘制图形等。如果onDraw()方法没有被正确实现,那么即使调用了invalidate()方法,视图也不会被重绘。
  2. invalidate()方法没有被正确调用:我们需要确保在需要重绘的时候正确调用invalidate()方法。通常情况下,我们会在视图的某些属性发生变化时调用invalidate()方法,以触发重绘操作。例如,在用户交互或数据更新后,我们可以调用invalidate()方法来更新视图。
  3. 视图被遮挡或不可见:如果自定义视图被其他视图遮挡或处于不可见状态,那么即使调用了invalidate()方法,视图也不会被重绘。在这种情况下,我们需要确保自定义视图处于可见状态,并且没有被其他视图遮挡。

总结起来,当我们在CustomView中调用invalidate()方法时,如果没有触发onDraw()方法的调用,我们需要检查自定义视图的绘制逻辑是否正确实现,确保invalidate()方法被正确调用,并确保自定义视图处于可见状态且没有被遮挡。如果问题仍然存在,可能需要进一步检查代码逻辑或寻求其他解决方案。

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

  • 腾讯云移动开发平台:https://cloud.tencent.com/product/mpp
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云音视频处理(VOD):https://cloud.tencent.com/product/vod
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android自定义圆形View实现小球跟随手指移动效果

实现思路: 1)自定义View,在onDraw画圆作为小球; 2)重写自定义ViewonTouchEvent方法,记录触屏坐标,用新坐标重新绘制小球; 3)在布局引用自定义View布局,运行程序...提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程调用,因为他是违背了单线程模型: 1....Android UI操作并不是线程安全,并且这些操作必须在UI线程调用。    invalidate()是用来刷新View,必须是在UI线程中进行工作。...比如在修改某个view显示时,调用invalidate()才能看到重新绘制界面。invalidate()调用是把之前view从主UI线程队列pop掉。...其余线程可以理解为工作者线程。invalidate()得在UI线程中被调动,在工作者线程可以通过Handler来通 知UI线程进行界面更新。

1.7K30

android自定义view用path画长方形

这次主要是练习一下Android自定义view和path相关使用,所以做了一个简单demo:自定义一个view,并用path在上面画一个可以动态改变圆角大小长方形。...,这里属性类型定为flag(位或运算)这样就可以在布局同时使用多个属性了,类似于EditText定义文字样式:android:textStyle=”bold|italic”;round_radius...canvas); } public void setRadius(float radius) { this.radius = radius; } public void refreshView() { invalidate...(); } } 这里使用了path和贝塞尔曲线绘制方法来绘制可动态调整圆角大小长方形,注意每次重绘时要先调用path.reset()清除之前绘制path,然后再绘制新path,不然旧path还会一直存在...布局中使用自定义view <wjc.myrecyclerview.CustomView android:id="@+id/custom_view" android:layout_width="200dp

56320

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

绘制代码是写在onDraw()方法,而这部分内容我们已经在 Android视图绘制流程完全解析,带你一步步深入了解View(二) 中学习过了。...而onClick()方法逻辑就更加简单了,只是对mCount这个计数器加1,然后调用invalidate()方法。...通过 Android视图状态及重绘流程分析,带你一步步深入了解View(三) 这篇文章学习我们都已经知道,调用invalidate()方法会导致视图进行重绘,因此onDraw()方法在稍后就将会得到调用...,在TitleView构建方法,我们调用了LayoutInflaterinflate()方法来加载刚刚定义title.xml布局,这部分内容我们已经在 Android LayoutInflater...接下来调用findViewById()方法获取到了返回按钮实例,然后在它onClick事件调用finish()方法来关闭当前Activity,也就相当于实现返回功能了。

1.1K90

Android5.0新特性之——控件移动动画(初级)

其中可以看出设置是黑、蓝、绿三个颜色。但是效果图是有很多种颜色变化,这是因为在从蓝色到绿色进行过度时候,中间做了补间色转变。具体可以百度一下色盘。...方法和setRotationY这两个方法调用,会有问题。...一旦调用,就会出现控件消失情况。这里是华为系统问题。不做过多介绍。也就是如果在华为mate8和mate7系统下,调用这个动画,展示动画控件,就会出现消失问题。所以这里慎用!!!!!...直接贴代码: 首先是自定义控件CustomView(这里为了节省篇幅,构造方法没有粘贴) public class CustomView extends android.support.v7.widget.AppCompatTextView...{ private float redR=0; @Override protected void onDraw(Canvas canvas) { super.onDraw

52020

Android自定义View系列 (从小白做起) 二: 相知

Android App开发过程,很多时候会遇到系统框架中提供控件无法满足我们产品设计需求,那么这时候我们可以选择先Google下有没有比较成熟开源项目可以让我们用,当然现在Github上面的项目非常丰富...同样View给我们暴露了onDraw方法 protected void onDraw(Canvas canvas) {} 默认View类onDraw没有一行代码,但是提供给我们了一张空白画布,举个例子...View还有三个比较重要方法 requestLayout View重新调用一次layout过程。...invalidate View重新调用一次draw过程 forceLayout 标识View在下一次重绘,需要重新调用layout过程。...其实就是调用canvasdrawLine方法,然后每次将draw起点向前推进,在方法结尾,我们调用invalidate方法,上面我们已经说明了,这个方法会让View重新调用onDraw方法,所以就达到我们进度条一直在向前绘制效果

30230

Android初步自定义view

AndroidView研究自学之路 Chapter One,自定义一个显示文本自定义view 首先,定义一个继承自view子类Customview public class CustomView...总结下来就是 第一,先定义自己view类 第二,创建资源文件添加view属性 第三,在onMeasure方法测量view所需要显示大小 第四,在onDraw借助画笔和画布把view绘制出来。...恩~看着确实挺简单,实现起来真是问题层出不穷 Chapter Two,所遇到问题 转载请注明出处  Android初步自定义view 问题1 ,Paint画笔对象为null异常 FATAL...view时实现了三个构造方法,使用是as快捷键创建,以至于第三个构造方法根本就没调用,所以做什么都是错,解决方案很简单,那就是把第二个构造方法方法体改一下即可 public CustomView...问题解决 问题2,绘制上发现所自定义 view进行了全屏显示,打开手机上显示布局边界功能之后可以发现所自定义view进行了全屏显示,占据了一个界面上父view所剩余所有空间。 ?

56670

Android View.onDraw(Canvas canvas)使用方法

Android View.onDraw(Canvas canvas)使用方法 View通过View.onDraw(Canvas canvas)来Draw....我们可以定义自己继承于ViewTestView,然后重载View.onDraw(Canvas canvas). 对于自定义TestView如何与Activity关联?...另外,可以在layout文件里面可以使用自定义View(如何自定义View为内部类,就会失效), 如: <?xml version="1.0" encoding="utf-8"?...以下为使用onDraw(Canvas canvas)画矩形区域,及在其上画文本实例(通过使用内部类使程序显得更加简洁,紧凑): package com.android.test; import android.app.Activity...如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站支持!

1.8K31

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

前言 小伙伴们,在前面的几篇文章,我们谈到了Android开发几种数据存储方式及数据持久化以及数据权限相关内容,本文我们介绍下Android开发另一部分内容,自定义View。...一.Android 自定义view概念 在Android,自定义视图(Custom View)是指开发者可以根据自己需求和创意创建全新用户界面组件。...实现复杂绘制操作:自定义视图类onDraw()方法允许您使用Canvas对象进行绘制操作,例如绘制图形、文本、位图等,从而创建出独特UI元素。...XML布局文件添加自定义视图: <com.example.app.CustomView android:layout_width="match_parent" android:layout_height...="wrap_content" /> 接下来,您可以在CustomView重写onDraw()方法来实现具体绘制逻辑。

31420

Android自定义View圆形和拖动圆、跟随手指拖动效果

单纯自定义一个圆非常简单 只需要几步就完成 拖动圆添加实现触摸事件即可 在第一次自定义View圆遇到几个Bug: 1.拖动圆的话在xml里面设置自定义圆宽和高是它能活动空间大小 不是圆控件大小...2.在定义充满属性match_parent时候运行会报错,什么方法都用了就是不行,耐心等待过一会就好了…有可能是studio没来得及编译过来 下面开始写代码: 先是单纯创建一个圆形 创建一个类继承...View 实现onDraw方法 public class CustomView extends View { //创建point对象 参数为x坐标和y坐标 private PointF point..., 50, new Paint()); } } XML里、自己定义view类名字: <ydtx.bwie.com.xiangmu_project02.CustomView android:layout_width...true; } } 总结 以上所述是小编给大家介绍Android自定义View圆形和拖动圆、跟随手指拖动效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

64431

Android绘图Canvas十八般武器之Shader详解及实战篇(上)

Android也有Shader概念,对照上面的定义,它应该也是将图形画面产生某种特殊效果一类东西。具体是不是这样呢?可以先告诉你答案–是的。...AndroidShader相关知识点 看API终于不要访问外国网站了,其实也一直没有访问外国网站,想看API时候,直接去www.androidxref.com查看源码去了。...AndroidShaderAPI地址为Shader Android对Shader是这样解释 Shader是一种基类对象,它在图形绘制过程返回一段段颜色值,通过调用Paint.setShader...文字很难解释,用图片来代替吧。 原图如下: 原图分辨率是562*336 我们编写一个自定义View–CustomView。...然后在它onDraw()方法画一个矩形,并且设置画笔Shader为BitmapShader,Shadertiling模式为CLAMP.

2.7K30

Android自定义View圆形和拖动圆跟随手指拖动

单纯自定义一个圆非常简单 只需要几步就完成 拖动圆添加实现触摸事件即可 在第一次自定义View圆遇到小问题: 1.拖动圆的话在xml里面设置自定义圆宽和高是它能活动空间大小 不是圆控件大小...view会提示编译 点击Build编译一下就好了 image.png 下面开始写代码: 先是单纯创建一个圆形 创建一个类继承View 实现onDraw方法 public class CustomView...(Canvas canvas) { super.onDraw(canvas); //参数为圆横坐标 ,纵坐标,半径,创建 //如果圆形出不来 说明你xml里定义宽和高空间不够大...android:layout_width="match_parent" android:layout_height="match_parent" / 一个圆就这样创建好了 直接运行就可以了..., defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas);

88110

自定义View进阶路:绘制饼图

; import cn.hlq.customview.PieChartView; import cn.hlq.customview.bean.PieCharBean; public class PieChartActivity...当我们第一次绘制扇形时候,Path记录了当前属性,也就是颜色值,在绘制下一个扇形时候,由于Path依然缓存或者说是记录第一次属性值时,造成后果就是我们看到一个颜色大圆形。...So,我们只需调用reset()使其重置便可达到我们想要效果。 细心伙计发现了,效果图展示时候,每个扇形之间有个间隔,怎么这个没有呢?不急不急,听我细细道来。 ?...首先实现之前我们要明白,在我们自定义View,也就是我们绘制饼图中,点击了某一块,饼图是怎么知道点击哪儿块呢?...如下, // 重绘 invalidate(); 不要9.9,也不要998,只需要调用invalidate(),通知onDraw更新即可。不信?咱运行瞅瞅。 ? 嗯哼,是不是有效果了?

68520

解析6种常用View 滑动方法

本文选自《Android进阶之光》 View 滑动是Android 实现自定义控件基础,同时在开发我们也难免会遇到View 滑动处理。...图1 方块就是我们自定义CustomView,它会随着我们手指滑动改变自己位置。 ?...只有Button 在手机屏幕显示,它Android 坐标为(60,60) 。现在我们调用scrollBy(50,50),按照字面的意思,这个Button 应该会在屏幕右下侧,可是事实并非如此。...在这个方法,我们调用父类scrollTo()方法并通过Scroller 来不断获取当前滚动值,每滑动一小段距离我们就调用invalidate()方法不断地进行重绘,重绘就会调用computeScroll...(); } } 最后我们在ViewSlideActivity.java 调用CustomView smoothScrollTo()方法。

1K30
领券