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

如何通过代码动态设置LottieAnimationView宽高?设置后不生效如何解决

LottieAnimationView动态设置宽高不生效问题解决方案

问题原因

  • 单位设置错误:代码中直接传入的30是px单位,不同设备分辨率差异大,若你预期的单位是dp,30px在高分辨率设备上尺寸会非常小,视觉上看起来就像设置未生效。
  • 布局参数类型不匹配:你直接创建RelativeLayout.LayoutParams传入,但如果LottieAnimationView的父容器不是RelativeLayout,错误的LayoutParams类型会被系统忽略,导致设置无效。
  • Lottie自身配置覆盖布局参数:LottieAnimationView默认带有缩放、自适应动画原始尺寸的配置,如果开启了自适应动画大小的规则,会覆盖你手动设置的布局宽高。
  • 调用时机错误:如果在页面onCreate、onCreateView等View还未完成测量的阶段调用设置方法,参数会被后续的系统测量流程覆盖。

正确实现方式

首先先实现dp转px的单位转换工具,确保不同设备上显示大小一致:

// dp转px工具方法
private int dp2px(float dpValue) {
    final float scale = getResources().getDisplayMetrics().density;
    return (int) (dpValue * scale + 0.5f);
}

通用适配代码

优先获取View已有的LayoutParams修改,避免丢失原有margin、约束等布局参数,同时配置Lottie的缩放规则:

int targetWidthDp = 30;
int targetHeightDp = 30;
LottieAnimationView lottieanimation = findViewById(R.id.ltanms);

// 配置Lottie按指定尺寸展示,不自适应动画原始大小
lottieanimation.setScaleType(ImageView.ScaleType.FIT_CENTER);
lottieanimation.setResizeMode(LottieAnimationView.ResizeMode.FIXED_SIZE);

// 根据父布局类型选择对应的LayoutParams,此处以父布局为RelativeLayout为例
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) lottieanimation.getLayoutParams();
params.width = dp2px(targetWidthDp);
params.height = dp2px(targetHeightDp);
lottieanimation.setLayoutParams(params);

初始化阶段调用的兼容处理

如果需要在页面刚创建时就设置宽高,用post方法等待View完成测量后再执行:

lottieanimation.post(() -> {
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) lottieanimation.getLayoutParams();
    params.width = dp2px(30);
    params.height = dp2px(30);
    lottieanimation.setLayoutParams(params);
});

注意:如果Lottie的父容器是ConstraintLayout、LinearLayout等其他布局,需要将LayoutParams替换为对应父布局的类型。

内容的提问来源于stack exchange,提问作者sharma pooja balrambhai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:42:01