如何通过代码动态设置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
相关产品推荐
相关产品推荐

