根据the Android developer site,我们可以从位于路径上的xml文件以编程方式加载AnimatorSet
类:res/animator/filename.xml
。所以我创建了一个示例项目并尝试查看它是否真的有效,但事实并非如此;什么都没发生。如果我能理解缺少的东西和/或我做错了什么,那将是非常好的。提前致谢!下面是我的animator xml文件和加载xml的Java代码:
RES /动画/ sample.xml中:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially"
>
<set>
<objectAnimator
android:propertyName="x"
android:duration="500"
android:valueTo="400"
android:valueType="intType"
/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"
/>
</set>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"
/>
</set>
这是我的Java代码,用于加载上面的xml文件:
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();
}
});
答案 0 :(得分:25)
您设置包含另一个集res/animator/sample.xml
。简化它
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially"
>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"
/>
</set>
你像这样充气AnimatorSet
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(getActivity(), R.animator.sample);
set.setTarget(fab); // set the view you want to animate
set.start();
到目前为止,我还没有找到一种方法将 objectAnimator 从xml扩展到Java。我必须把它包装在 Set
中答案 1 :(得分:1)
这是文档中给出的示例中的错误。
尝试将android:valueType="intType"
更改为android:valueType="floatType"
。
它适用于 @RaymondChenon ,因为他没有明确更改
android:valueType
到int
因此系统采用默认值float
这里的问题是你在动画师中提供了android:valueType="intType"
,对于你动画的属性android:valueType="floatType"
应该是android:propertyName="x"
。
在运行时系统中查找属性的 setter ,您想要设置动画。
就像你的情况一样,它会寻找setX()
,但是当你定义int
类型的参数类型时会导致不匹配,因为没有这样的方法,我不知道它为什么没有#&# 39;导致崩溃。
查看查看类的属性,有方法setX(float)
为了进一步了解,您可以参考StackOverflow Question