自定义View的视图刷新问题

在做项目的时候,刷新adapter其他的数据都更新了,但是自己定义的视图没有更新,后来发现自己没有执行invalidate ()方法,没有手动的让视图刷新

自定义 View 继承自 View 类,然后重写他的onMeasure() 、onDraw()、和 onLayout()方法。在 onMeasure()方法中测量出自定义控件的宽和高并且调用setMeasuredDimension(width, height)方法将宽高配置好,然后调用 onLayout()方法来确定自定义控件在布局中的位置,最后调用 onDraw()方法来将自定义 view 绘制在布局中。今天我主要想给大家分享下我个人使用自定义 view 是遇到的重绘和更新使用。

之前在项目中使用到一个自定义控件,需求是在点击控件的时候可以改变它的宽高,并且还要改变它的内容。这时候就需要使用到 view 的 requestLayout()方法及 invalidate ()方法了。这里要注意,必须先调用 requestLayout() 方法再调用 invalidate ()方法。具体原因是,在调用 requestLayout() 方法时,view 只会执行 onMeasure(先)及 onLayout(后)方法,而调用 invalidate ()方法时,view 会调用 onDraw()方法。调用完这两个方法你的自定义控件就可以重绘及更新了。

ps:若只改变宽高调用 requestLayout() 方法即可,若只更新内容调用  invalidate ()方法。

猜你喜欢

转载自blog.csdn.net/u013802387/article/details/78676626