50 红包答谢,帮解决一个 Android UI 问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
scola
V2EX    Android

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

  •  
  •   scola 2019-12-14 23:09:23 +08:00 14165 次点击
    这是一个创建于 2131 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 我有一个自定义 view(A), 有一些动画效果和 textview,不停的在更新, 将 A 添加到了一个约束布局( viewgroup )
    2. 在约束布局 removeView ( A ),约束布局 set Gone,将 A 添加到 windowmanager, 显示正常
    3. 在 windowmanger 中 removeView ( A ),再次 addView 到约束布局, 约束布局 set Visibility View.VISIBE,此时有问题, 动画不再更新,里面的 textview 也不更新,A 感觉卡住了

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


    求大佬帮解决这个问题
    第 1 条附言    2019-12-16 22:33:33 +08:00
    在同事的帮助下终于解决了

    windowmanager remove 之后不要直接 viewgroup.addview

    addview 放在 view.post 里面就可以了

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

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

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

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


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

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

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

    -
    实在不行把代码发出来,光靠猜有点难
    nicevar
        9
    nicevar  
       2019-12-15 10:33:02 +08:00
    @scola 你一不提供 demo,二不仔细跟一下可能出问题的,光靠自己的瞎想和你这样描述很难解决问题,要么你就干脆点直接扔个 demo 让大家帮你看一下
    gowa
        10
    gowa  
       2019-12-15 22:12:34 +08:00 via Android
    talk is cheap show me you code
    CoderMVP
        11
    CoderMVP  
       2019-12-15 22:16:52 +08:00 via iPhone
    这种问题有可能是多次 remove 和 add,但是资源没有释放导致的。在你的自定义 view 的 onDetachToWindow()做调用动画的停止并把动画引用置空试试
    ex1gtnim7d
        12
    ex1gtnim7d  
       2019-12-16 23:38:59 +08:00
    UI 做多了现在基本上,如果不如预期表现,首先考虑线程问题,楼主可以注意下。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5850 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 02:57 PVG 10:57 LAX 19:57 JFK 22:57
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86