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

如何解决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;
});
额外注意事项

如果修改后仍然存在穿透问题,检查两点:

  1. LottieAnimationView的宽高是否铺满了你需要拦截点击的区域,如果是wrap_content大小不足,点击到控件外的区域依然会触发下层视图,需要调整宽高为match_parent铺满对应区域
  2. 检查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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:45:03