Android 属性动画

11
<objectAnimator
    android:propertyName="string"
    android:duration="int"
    android:valueFrom="float | int | color"
    android:valueTo="float | int | color"
    android:startOffset="int"
    android:repeatCount="int"
    android:repeatMode=["repeat" | "reverse"]
    android:valueType=["intType" | "floatType"]/>

好的,我正在学习 Android 中的一些动画。我从 Google 开发者文档中找到了两个属性,但实际上我无法理解它们的含义。

android:propertyName="string"
android:valueType=["intType" | "floatType"]

有些值是有意义的, 如"fade", "rotation", "alpha",但像endYear, firstDayOfWeek这样的其他值呢?我无法找到任何详细的文档解释这些问题,或者也许是因为我没有理解各种教程和谷歌文档试图传达的内容。

**

我的疑问是如何获取所有可能的"propertyName"的值,以及"valueType"是什么意思,我指它实际上是做什么的,它如何影响动画

**

我在参考这个教程,并尝试使用属性来更好地理解。例如下面的屏幕截图展示了propertyName的许多可能性,但我不知道它们是什么意思。

enter image description here

此外,propertyName接受"x"和"y"作为其值,但它们在窗口中并不存在。

至于ValueType,如果我在下面这个教程中更改"wheel"floatType"intType"

<objectAnimator
    android:duration="3000"
        android:propertyName="rotation"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:valueTo="180"
        android:valueType="floatType" />

它停止动画了..??????

有人能解释这个问题或提供一个资源,以便我可以找出原因。

这就是在Google文档中所解释的内容。

注意:这不仅是我第一次尝试在Android上进行动画,也是我生命中第一次尝试动画。

2个回答

12
propertyName参数可以是动画目标类定义的任何属性。例如,如果您要动画化的对象提供了getFoo()setFoo()方法,则存在一个名为"foo"的属性可供动画化。
一个非常简单的例子是View的getAlpha()setAlpha()方法。它们一起定义了您可以动画化以创建淡入淡出效果的"alpha"属性。
这也意味着您可以在自定义视图中创建自己的属性。您所需要做的就是创建两个公共方法:一个getter和一个setter。
您可以查看此页面获取更多信息:http://developer.android.com/guide/topics/graphics/prop-animation.html#object-animator

好的,现在我对它背后的概念有了更好的理解。这意味着当我写android:propertyName="x"时,它实际上会查找getX(),这可能在源代码中预定义了,但是当我写android:propertyName="z"时,它会引发错误Method setZ() with type int not found on target class class android.widget.ImageView,这意味着如果我自己定义getZ(),它就会自动开始选择它。是吗?但是当我查看android.widget.ImageView的源代码时,甚至看不到像setX()这样的东西,尽管它接受"x"作为属性名称。 - DeltaCap019
3
您可能未查看正确的源代码文件或版本。setX() 方法 是在 Android.view.View 类 中添加的,要求 API 11 (Honeycomb) 及以上版本。 - Joe
1
@Joe 嗯,你说得对,我正在查看 https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ImageView.java。因为我正在将动画属性应用于 ImageView,但是根据生成的错误“在 android.widget.ImageView 上找不到方法”,我跳转到了它的源代码,并感到更加困惑...你提供的链接有助于从中获取更有意义的信息 :) - DeltaCap019
2
我现在对 PropertyName 很清楚了。 那么 ValueType 呢?根据自动完成窗口,它只能是 intfloat。这是否告诉我们要传递给 PropertyName 方法的 argument type。我的理解是,提供 ValueType 是为了支持 Mehtod Overloading。如果我们有一个接受 int 参数和另一个接受 float 参数的相同方法,则 ValueType 有助于指定调用哪个方法。我是对的吗? - DeltaCap019

9

针对Android 3.0及以上版本,根据此网站提供的信息,可用的动画属性包括:

  • translationX
  • translationY
  • rotation
  • rotationX
  • rotationY
  • scaleX
  • scaleY
  • pivotX
  • pivotY
  • x
  • y
  • alpha

除了上述属性外,您还可以使用get&set创建自己的属性。不知道新的Android版本是否内置更多属性。

您可以在API演示中测试这些属性,在NineOldAndroids库中进行测试,也可以在三星样例中进行测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接