Android属性动画报错:View类无int类型setX()方法,求解决方案
解决Android属性动画中
setX()方法找不到int类型参数的问题 嘿,这个问题我之前也踩过坑!错误提示已经把原因说得明明白白了——你给View的setX()方法传了int类型的值,但Android的View类里,setX()方法的参数是float类型的,根本没有接受int的重载方法,所以动画系统找不到匹配的方法就报错了。
问题根源
你在XML动画配置里设置了android:valueType="intType",强制让动画用整数类型的数值,但x属性对应的setX(float)方法只认float,两者类型不匹配,就触发了这个错误。
两种快速解决办法
方法一:修改XML动画配置(推荐)
直接调整XML里的数值类型,让它和setX()的参数类型匹配:
- 要么把
android:valueType="intType"改成android:valueType="floatType",同时把valueFrom和valueTo写成小数格式(比如0.0、400.0) - 要么直接删掉
android:valueType这一行,系统会自动根据目标属性的setter方法推断数值类型,即使你写整数也会自动转成float
修改后的XML示例(两种写法都可以):
写法1(显式指定float类型):
<?xml version="1.0" encoding="utf-8"?> <set android:ordering="sequentially" xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:propertyName="x" android:duration="500" android:valueFrom="0.0" android:valueTo="400.0" android:valueType="floatType"/> </set>
写法2(让系统自动推断类型):
<?xml version="1.0" encoding="utf-8"?> <set android:ordering="sequentially" xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:propertyName="x" android:duration="500" android:valueFrom="0" android:valueTo="400"/> </set>
方法二:代码中动态调整(不推荐,除非特殊需求)
如果不想修改XML,也可以在代码里拿到对应的ObjectAnimator,调整它的数值类型:
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(PropertyAnimationActivity.this, R.animator.animation_load_from_xml_example); // 获取set里的第一个ObjectAnimator ObjectAnimator animator = (ObjectAnimator) set.getChildAnimations().get(0); // 重新设置数值为float类型 animator.setFloatValues(0f, 400f); set.setTarget(animatorSetView); set.start();
不过这种方式不如直接修改XML直观,动画配置还是放在资源文件里更便于维护。
额外提示
Android View的很多位置相关属性(比如y、translationX、translationY、scaleX等)的setter方法都是接收float类型参数的,以后做这类动画的时候,记得别再指定intType啦!
内容的提问来源于stack exchange,提问作者Tung Vo
相关产品推荐
相关产品推荐

