RelativeLayout заставляет анимацию не работать? - PullRequest
7 голосов
/ 20 января 2012

У меня есть действие, макет которого содержит только 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> 

в RelativeLayout ниже VideoView, то анимация будет работать.Однако, если я уберу пространство из элемента android: text этого, он снова не будет работать.oO

РЕДАКТИРОВАТЬ: Я наградил Беовульфа Бьорнсона за хороший совет использования более новой анимационной структуры.

Но я все еще очень заинтересован, если кто-нибудь когда-нибудь узнает, что происходит с анимацией старого стиля в этой ситуации, я был бы более чем рад поднять еще несколько очков за это.

Ответы [ 2 ]

9 голосов
/ 28 января 2012

Я не уверен, что использование сторонней библиотеки является жизнеспособным решением для вас, но я настоятельно рекомендую NineOldAndroids, чтобы вы могли использовать возможности анимации 3.0+ в более ранних версиях Android.Они облегчают эту работу.

Вот ссылка: http://nineoldandroids.com/

Затем, в своей деятельности вы можете сделать что-то простое:

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

I 'Мы проверили его с использованием 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 голос
/ 28 января 2012

Я не уверен, но в моем приложении у меня есть RelativeLayout и Animaion, а также видео работает нормально.

Если VideoView - это единственный вид макета, тогда установите относительные высота и ширину в качестве fill_parent, а также дляVideoView, а затем попробуйте.

Надеюсь, что это будет работать.Если нет, то дайте мне знать.

...