如何解决LottieAnimationView点击事件穿透至下层视图的问题
问题根源
Android触摸事件分发机制中,只有控件消费了触摸事件,才会阻止事件向下传递到下层视图。你当前设置的setClickable(false)、setEnabled(false)刚好和需求相反:这两个属性设为false时,控件不会消费触摸/点击事件,事件自然会穿透到下层。
解决方案
以下方案任选其一即可解决问题:
- 方案1:调整Lottie属性配置,让控件主动消费点击事件
将原有代码中的
lottieview.setEnabled(false); lottieview.setClickable(false);
替换为:
// 让控件消费触摸事件,阻止向下传递 lottieview.setClickable(true); lottieview.setFocusable(true); // 不需要额外设置点击监听器,不会触发额外交互逻辑
- 方案2:设置触摸监听强制拦截事件
如果方案1不生效,可以直接通过触摸监听强制消费所有事件:
lottieview.setOnTouchListener((v, event) -> { // 返回true代表消费当前触摸事件,不再向下分发 return true; });
额外注意事项
如果修改后仍然存在穿透问题,检查两点:
- LottieAnimationView的宽高是否铺满了你需要拦截点击的区域,如果是
wrap_content大小不足,点击到控件外的区域依然会触发下层视图,需要调整宽高为match_parent铺满对应区域 - 检查Lottie的父布局是否设置了
clickable=false,父布局如果拦截/不消费事件也可能导致异常
修改后完整示例代码
public void showProgress(LottieAnimationView lottieview) { lottieview.setVisibility(LottieAnimationView.VISIBLE); lottieview.bringToFront(); lottieview.setAnimation(R.raw.wesocialdot); lottieview.setAlpha(0.85f); lottieview.setRepeatMode(LottieDrawable.REVERSE); lottieview.setRepeatCount(9999999); // 核心配置:消费触摸事件阻止穿透 lottieview.setClickable(true); lottieview.setFocusable(true); lottieview.playAnimation(); }
内容的提问来源于stack exchange,提问作者Hoax
相关产品推荐
相关产品推荐

