Android获取动画起点的视图位置

时间:2014-11-12 11:19:15

标签: android animation

您好我正在尝试创建一个以当前位置为起点的动画

    Animation outAnimation = new TranslateAnimation(
            Animation.RELATIVE_TO_PARENT, 0.0f,
            Animation.RELATIVE_TO_PARENT, 0.0f,
            Animation.ABSOLUTE, overlay.getTranslationY(),
            Animation.RELATIVE_TO_PARENT, +1.0f);
    outAnimation.setFillAfter(true);
    outAnimation.setDuration(1500);
    outAnimation.setInterpolator(new AccelerateInterpolator());

overlay是一个LinearLayout,其RelativeLayout为Parent。

但overlay.getTranslationY()返回0,虽然它当前位于RelativeLayout的底部(通过动画)

<RelativeLayout
    android:id="@+id/realtiveArea"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >

    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_below="@+id/titlebar"
        android:layout_marginTop="-12dp" >
        <TextView
            android:id="@+id/overlayText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

</RelativeLayout>

2 个答案:

答案 0 :(得分:1)

由于您正在运行动画(而不是动画制作工具),因此视图的实际位置(getY())不会动画,只有动画的动画制作动画。您可以尝试记录&#39; getTop()&#39;&#39; getTranslationY()&#39;和&#39; getY()&#39;在动画期间。这些都不会改变)

我强烈建议您切换到Animator(并在可能的情况下使用ViewPropertyAnimator API)。

您的整个OutAnimation可以改写为:

overlay.animate()
  .translationY(overlay.getRootView().getHeight()
        - overlay.getTop()
        - getHeight())
  .setDuration(1500)
  .setInterpolator(new AccelerateInterpolator());

您可能需要更改InAnimation才能使进出动画具有一致的行为。随意发布InAnimation。

动画师可从API 11获得,但由于您使用的是getTranslationY(),因此您可能已经在使用API​​&gt; 11进行构建。

答案 1 :(得分:0)

overlay.getTranslationY()返回translationY属性。你需要的是overlay.getY()