java如何以编程方式在Android上加载animator xml文件?
根据the Android developer site,我们可以从如下路径上的xml文件以编程方式加载AnimatorSet
类:res/animator/filename.xml
。因此,我创建了一个示例项目,并试图看看它是否真的有效,但它没有;什么也没发生。如果我能理解遗漏了什么和/或我做错了什么,那就太好了。提前谢谢!下面是我的animator xml文件和加载xml的Java代码:
res/动画师/样本。xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
安卓:ordering="sequentially"
>
<set>
<objectAnimator
安卓:propertyName="x"
安卓:duration="500"
安卓:valueTo="400"
安卓:valueType="intType"
/>
<objectAnimator
安卓:propertyName="y"
安卓:duration="500"
安卓:valueTo="300"
安卓:valueType="intType"
/>
</set>
<objectAnimator
安卓:propertyName="alpha"
安卓:duration="500"
安卓:valueTo="1f"
/>
</set>
下面是我加载上述xml文件的Java代码:
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View view) {
// Load and start Animaton
AnimatorSet animSet =
(AnimatorSet) AnimatorInflater.loadAnimator(view.getContext(), R.animator.sample);
animSet.setTarget(view);
animSet.start();
}
});
# 1 楼答案
这是文档中给出的示例中的一个错误
尝试将
android:valueType="intType"
更改为android:valueType="floatType"
它适用于@RaymondChenon的情况,因为他没有明确更改
android:valueType
到int
所以系统采用默认值float
这里的问题是,您在动画制作程序中为正在制作动画的属性
android:propertyName="x"
提供了android:valueType="intType"
,该属性应该是android:valueType="floatType"
在运行时系统查找要设置动画的属性的设置器。 就像在您的例子中一样,它将查找
setX()
,但是当您定义类型为int
的参数类型时,它会导致不匹配,因为没有这样的方法,我不知道为什么它不会导致崩溃查看视图类的属性有一个方法setX(float)
为了进一步了解,您可以参考StackOverflow Question
# 2 楼答案
您的集合包含另一个集合
res/animator/sample.xml
。简化它您可以像这样为动画集充气
到目前为止,我还没有找到将objectAnimator从xml扩展到Java的方法。我必须将它包装在一套中