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
相关产品推荐
相关产品推荐

