有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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();
  }
});

共 (2) 个答案

  1. # 1 楼答案

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

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

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

    这里的问题是,您在动画制作程序中为正在制作动画的属性android:propertyName="x"提供了android:valueType="intType",该属性应该是android:valueType="floatType"

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

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

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

  2. # 2 楼答案

    您的集合包含另一个集合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 set = (AnimatorSet) AnimatorInflater.loadAnimator(getActivity(), R.animator.sample);
    set.setTarget(fab); // set the view you want to animate
    set.start();
    

    到目前为止,我还没有找到将objectAnimator从xml扩展到Java的方法。我必须将它包装在一套