ViewPropertyAnimator的translateYBy()与yBy()方法有什么区别?

时间:2014-04-28 23:17:03

标签: android animation

ViewPropertyAnimators(http://developer.android.com/reference/android/view/ViewPropertyAnimator.html)有两种类型的方法来移动视图:

translateX()vs x(),translateY()vs y(),translateXBy()vs xBy(),最后是translateYBy()vs yBy()。

有人可以告诉我这些方法之间的区别吗?

5 个答案:

答案 0 :(得分:36)

上面的答案是不正确的。

文档指出XY属性是绝对位置,而translationXtranslationY分别指向LEFT和TOP属性。

因此,animate().x()animate().translationX()之间的区别在于,其中一个动画为绝对值,而另一个动画为静止绝对值,但由视图LEFT和{{确定1}}值。

相比之下,TOPanimate().xBy()(按代数值)将属性值增加指定的数量。

这是"一些数学的起源"以上引用。

答案 1 :(得分:5)

translationY()y()yBy()translationYBy()方法的可视化显示如下

答案 2 :(得分:2)

x指的是x轴上视图的当前视觉位置。因此,例如,当您通过调用xview.animate().x(10)设置动画时,视图将会设置为动画,以便移动到x=10。让我们假设当你开始动画时视图处于(100,150)的位置。到动画结束时,视图将在(10,150)中。

现在,将此与translationX进行对比。如果通过调用view.animate().translationX(10)为此属性设置动画,则表示您正在使用x轴中的许多像素移动视图。让我们假设相同的例子,当您开始动画时视图位于(100,150)的位置。到动画结束时,视图将在(110,150)中。

希望澄清x()translationX()之间的区别。 y()translationY()的差异相同,但在y轴上相同。

在我看来,xBy()translationX()达到的效果相同,但使用x属性本身加上一些数学。 yBy()translationY()是y轴的等价物。

希望澄清......

答案 3 :(得分:0)

  

translationX和translationY:这些属性通过其布局容器设置的左侧和顶部坐标控制View所在的位置作为增量。

     

x和y:这些是描述最终结果的简单实用程序属性   视图在其容器中的位置,作为左侧和顶部的总和   值和translationX和translationY值。

Animate views docs

答案 4 :(得分:0)

首先,试着理解两者之间的区别 视图的 xtranslationX 属性。

您可以通过在 here

上引用文章来实现

在那之后你就会得到不同。

  1. x 是布局的绝对位置。 (位置 + translationX)
  2. translationX 是应用于视图位置的偏移量

当我们使用 x() / translationX() / xBy() / translationXby() 属性制作动画时,视图的 translationX 属性会改变。您也可以通过添加如下日志来检查它

Log.i("INFO getX", String.valueOf(bartImageView.getX()));
Log.i("INFO getTranslationX", String.valueOf(bartImageView.getTranslationX()));

以下是各种函数动画结束前后的样子:

之前(在所有动画之前相同):

 INFO getX: 278.0
 INFO getTranslationX: 0.0
  1. x(100)

    (第一次)之后:

     INFO getX: 100.0
     INFO getTranslationX: -178.0
    

    在(第二次)之后(没有动画):

     INFO getX: 100.0
     INFO getTranslationX: -178.0
    
  2. translationX(100):

    之后(第一次):

      INFO getX: 378.0
      INFO getTranslationX: 100
    

    在(第二次)之后(没有动画):

      INFO getX: 378.0
      INFO getTranslationX: 100
    
  3. xBy(100):

    (第一次)之后:

      INFO getX: 378.0
      INFO getTranslationX: 100
    

    之后(第二次):

      INFO getX: 478.0
      INFO getTranslationX: 200
    
  4. translationXBy(100)

    (第一次)之后:

      INFO getX: 378.0
      INFO getTranslationX: 100
    

    之后(第二次):

      INFO getX: 478.0
      INFO getTranslationX: 200
    

如您所见,xBy()translationXBy() 以相同的方式工作,并且每次动画时都以代数方式将 translationX 添加到视图中被触发。

同样的事情也适用于 y Dimension。随意添加日志并查看。