50 红包答谢,帮解决一个 Android UI 问题

2019-12-14 23:09:23 +08:00
 scola
1. 我有一个自定义 view(A), 有一些动画效果和 textview,不停的在更新, 将 A 添加到了一个约束布局( viewgroup )
2. 在约束布局 removeView ( A ),约束布局 set Gone,将 A 添加到 windowmanager, 显示正常
3. 在 windowmanger 中 removeView ( A ),再次 addView 到约束布局, 约束布局 set Visibility View.VISIBLE,此时有问题, 动画不再更新,里面的 textview 也不更新,A 感觉卡住了

requestLayout();
invalidate();
这些方法尝试过来,没什么用


求大佬帮解决这个问题
7059 次点击
所在节点    Android
12 条回复
guchengyehai1
2019-12-14 23:15:26 +08:00
第一步先检查有没有添加成功并正常显示
第二步查看 Animation 或者 Animator 有没有开始,Animator 原理看一下
nicevar
2019-12-14 23:42:42 +08:00
就这点描述很难猜出问题所在,约束布局如果 set invisible 而不是 gone 呢?
检查一下动画是否写的有问题,添加一下 listener 打日志观察或者观察一下动画不更新 view 的 dispatchDraw
Rysle
2019-12-15 00:20:39 +08:00
可能遇到了 ViewGroup.mDisappearingChildren 的陷阱。
试试在每次 removeView(A)之前,stop 掉 A 的 Animation。
rosu
2019-12-15 00:24:46 +08:00
最简单先看 3 动画是否开始。
KINGOD
2019-12-15 00:31:54 +08:00
我也遇到过 #3 类似问题,如果不先 stop(),start() 不管用,于是在动画启动的地方写的是 stop(); start(); 两条语句。

另外建议楼主检查下 addView() invalidate() 是否是在 UI Thread 下调用的,如果是非 UI 线程,就需要 postInvalidate() / postInvalidateOnAnimation() 这些 postXXX 方法。
scola
2019-12-15 08:14:15 +08:00
多谢楼上回复,感觉这个问题和动画关系不大,textview 也是不停更新的,父 view 是 windowmanager,显示正常,一旦把父 view 切换到 ViewGroup,就卡住

A 刚 new 出来,直接添加到 viewgroup 也是没有问题的,一旦执行了切换父 view 操作,切到 viewgroup,卡住,再次切到 windowmanger 恢复正常,切到 viewgroup,卡住

ui 相关的操作都是主线程,可以保证


@guchengyehai1
@nicevar
@Rysle
@rosu
@KINGOD
huoluobo
2019-12-15 09:29:48 +08:00
动画卡住的问题之前遇到过,如果你是在资源文件中定义动画效果的话,改成代码实现动画效果试试。
winterbells
2019-12-15 10:14:43 +08:00
打断点呢,view 的方法走进去了吗

rxjava 的主线程不一定能更新 UI,有次遇到没有 crash,但 UI 更新不了,打印出来线程是 main,Rx 而不是 main,main

还有一次遇到构造方法 super 错了,layout add view 没反应(自己失误,看了半天,最后用 Java 写了一遍才发现。。)

-
实在不行把代码发出来,光靠猜有点难
nicevar
2019-12-15 10:33:02 +08:00
@scola 你一不提供 demo,二不仔细跟一下可能出问题的,光靠自己的瞎想和你这样描述很难解决问题,要么你就干脆点直接扔个 demo 让大家帮你看一下
gowa
2019-12-15 22:12:34 +08:00
talk is cheap show me you code
CoderMVP
2019-12-15 22:16:52 +08:00
这种问题有可能是多次 remove 和 add,但是资源没有释放导致的。在你的自定义 view 的 onDetachToWindow()做调用动画的停止并把动画引用置空试试
kerb15
2019-12-16 23:38:59 +08:00
UI 做多了现在基本上,如果不如预期表现,首先考虑线程问题,楼主可以注意下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/629116

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX