您好我正在尝试创建一个以当前位置为起点的动画
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>
答案 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()
。