如何在Android上以编程方式加载animator xml文件?

sho*_*ano 9 java xml animation android

根据Android开发人员站点,我们可以AnimatorSet从位于路径上的xml文件以编程方式加载类,如下所示: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>
Run Code Online (Sandbox Code Playgroud)

这是我的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();
  }
});
Run Code Online (Sandbox Code Playgroud)

Ray*_*non 29

您设置包含另一个Set 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>
Run Code Online (Sandbox Code Playgroud)

你像这样给AnimatorSet充气

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(getActivity(), R.animator.sample);
set.setTarget(fab); // set the view you want to animate
set.start();
Run Code Online (Sandbox Code Playgroud)

到目前为止,我还没有找到一种方法将objectAnimator从xml扩展到Java.我必须将它包装在一个Set中


Del*_*019 4

这是文档中给出的示例中的错误。

尝试将 更改android:valueType="intType"android:valueType="floatType".

它适用于@RaymondChenon,因为他没有明确更改 android:valueTypeint,因此系统采用默认值float

这里的问题是你在动画师android:valueType="intType"中给出的内容应该是针对你正在制作动画的属性的。android:valueType="floatType"android:propertyName="x"

在运行时系统寻找您想要动画的属性的设置器。就像您的情况一样,它会查找setX(),但当您定义 type 的参数类型时,int它会导致不匹配,因为没有这样的方法,我不知道为什么它不会导致崩溃。

查看View类的属性有一个方法setX(float)

为了进一步理解,可以参考StackOverflow Question