You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Facebook新版Shimmer组件stopShimmer无法生效问题求助

Facebook Shimmer 0.5.0版本无法停止动画解决方案

核心问题说明

从0.1.0升级到0.5.0版本后,除了官方明确移除startShimmerAnimation()/stopShimmerAnimation()接口、替换为startShimmer()/stopShimmer()之外,框架内部新增了自动启停逻辑和动画实例缓存机制,是导致无法停止效果的主要原因。

修复步骤

  • 第一步:检查布局配置
    检查ShimmerFrameLayout的xml属性,确认未设置app:shimmer_auto_start="true"。该属性开启后,每次视图attach到窗口都会自动启动动画,即使调用stopShimmer(),后续视图重绘、重新attach时动画仍会自动重启,不需要自动启动的场景请将属性改为app:shimmer_auto_start="false"或者直接移除。
  • 第二步:调整代码启停逻辑
    0.5.0版本单独调用stopShimmer()仅会暂停动画,不会销毁动画实例,需要额外调用setShimmer(null)彻底清除动画,避免残留。标准启停代码如下:
    // 启动动画
    shimmerFrameLayout.startShimmer();
    
    // 停止动画的完整逻辑
    if (shimmerFrameLayout.isShimmerStarted()) {
        shimmerFrameLayout.stopShimmer();
        shimmerFrameLayout.setShimmer(null);
    }
    
    // 后续需要重新开启动画时,重新赋值shimmer实例即可
    Shimmer newShimmer = new Shimmer.AlphaHighlightBuilder()
            // 可自定义动画参数
            .setDuration(1500)
            .build();
    shimmerFrameLayout.setShimmer(newShimmer);
    shimmerFrameLayout.startShimmer();
    
  • 第三步:特殊场景适配
    如果在RecyclerView、ViewPager等可复用组件的item中使用Shimmer,需要在item复用回调(如onBindViewHolder)中先停止并清除上一个item的动画状态,再根据当前item的业务需求判断是否需要开启动画,避免复用导致的动画状态错乱。

内容的提问来源于stack exchange,提问作者pavani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:36:03