RelativeLayout导致动画不起作用?

时间:2012-01-19 21:02:18

标签: android animation relativelayout

我有一个活动,其布局只包含一个VideoView。这是xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent">


  <VideoView
android:id="@+id/videoplayer"
android:layout_width="match_parent"
android:layout_height="match_parent" 
android:layout_alignParentRight="true"
android:layout_alignParentLeft="true" 
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
>
</VideoView>

我试图在停止播放后将此动画应用于VideoView:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="0%" android:toYDelta="-100%" android:duration="500"/>
    <scale
    android:fromXScale="1.0"
    android:toXScale="0"
    android:fromYScale="1.0"
    android:toYScale="0"
    android:duration="500"
    android:pivotX="50%"
    android:pivotY="0%"
     />

</set>

如图所示,这非常有效。但是,如果我在布局中从LinearLayout切换到RelativeLayout,那么动画将不再起作用,视频会在停止之前显示的最后一帧上冻结。

为什么我的活动中的根布局类型会导致动画无法正常运行?

编辑:如果我添加此TextView

,则添加到怪异
<TextView
android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=" ">
</TextView> 

对于VideoView下面的RelativeLayout,动画将起作用。但是,如果我从这个android:text元素中取出空间,那么它又回来了。 o.O

编辑:我已经将Beowulf Bjornson的赏金授予使用新动画框架的好处。

但我仍然非常感兴趣,如果有人在这种情况下弄清楚旧式动画的情况,我会非常乐意为它提出更多的观点。

2 个答案:

答案 0 :(得分:9)

我不确定使用第三方库是否适合您,但我强烈推荐NineOldAndroids,因此您可以在早期版本的Android中使用3.0+的动画功能。他们使这项工作变得更容易。

以下是链接:http://nineoldandroids.com/

然后,在您的活动中,您可以做一些简单的事情:

VideoView view = (VideoView) findViewById(R.id.videoplayer);
animate(view).scaleX(0).scaleY(0).setDuration(500L);

我已经使用RelativeLayout对其进行了测试,并且按预期工作。

编辑:如果您希望使用本机蜂窝实现,此特定API为3.1+,应该像以下一样使用本机:

view.animate().scaleX(0).scaleY(0).setDuration(500L);

如果你希望本机支持3.0,你必须像这样使用它:

AnimatorSet set = new AnimatorSet();
set.playTogether(
    ObjectAnimator.ofFloat(view, "scaleX", 1.0f, 0.0f),
    ObjectAnimator.ofFloat(view, "scaleY", 1.0f, 0.0f),
);
set.setDuration(500).start();

答案 1 :(得分:1)

我不确定但是在我的应用程序中我有RelativeLayout和Animaion,并且视频也能正常工作。

如果VideoView是布局的唯一视图,则将relativeLayout高度和宽度设置为fill_parent,并将视频放入VideoView,然后尝试。

希望它能奏效。如果没有,请告诉我。