Android:ImageView资源图缩放淡入动画异常问题求助
解决ImageView缩放淡入动画初始显示问题
问题分析
你当前的动画配置存在两个核心问题:
- 缩放动画方向错误:原
scale动画是从1缩放到0,属于缩小消失效果,和你需要的"放大淡入"完全相反。 - 未设置初始状态:ImageView在动画开始前就已加载图片并以默认状态(完全显示)展示,导致动画启动前出现闪显。
解决方案
1. 修正动画XML配置
将缩放动画的fromXScale/fromYScale设为0,toXScale/toYScale设为1,同时添加android:fillAfter="true"保持动画结束后的状态:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true"> <scale android:duration="200" android:fromXScale="0" android:fromYScale="0" android:pivotX="50%" android:pivotY="50%" android:toXScale="1" android:toYScale="1" /> <alpha android:duration="200" android:fromAlpha="0" android:toAlpha="1" /> </set>
2. 设置ImageView初始状态
在启动动画前,将ImageView设置为透明且缩小的状态,避免初始闪显:
val zoomInFadeInAnim = AnimationUtils.loadAnimation(this, R.anim.zoom_in_fade_in) // 初始隐藏图片 imageView.alpha = 0f imageView.scaleX = 0f imageView.scaleY = 0f // 设置图片资源 imageView.setImageResource(R.drawable.ic_cross) // 启动动画 imageView.startAnimation(zoomInFadeInAnim)
推荐方案:使用属性动画(更可靠)
视图动画仅修改视觉表现,不改变View实际属性;属性动画直接修改View属性,效果更稳定:
imageView.setImageResource(R.drawable.ic_cross) // 初始状态设置 imageView.alpha = 0f imageView.scaleX = 0f imageView.scaleY = 0f // 执行属性动画 imageView.animate() .alpha(1f) .scaleX(1f) .scaleY(1f) .setDuration(200) .setInterpolator(AccelerateDecelerateInterpolator()) .start()
内容的提问来源于stack exchange,提问作者Hera Boom
相关产品推荐
相关产品推荐

