Как я могу сделать так, чтобы моя анимация шла снизу вверх на моем экране?

Это мой xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <SurfaceView
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="0dp" />

</RelativeLayout>

Я хочу, чтобы это представление росло со временем.

Вот код анимации

SurfaceView surfaceViewTimer = (SurfaceView) findViewById(R.id.surface_view_timer);
Animation surfaceGrowingAnimation = new TranslateAnimation
    (0, 0, Animation.ZORDER_TOP, 300);
surfaceGrowingAnimation.setDuration(5000);

surfaceViewTimer.startAnimation(surfaceGrowingAnimation);

Я хочу, чтобы эта анимация шла снизу вверх экрана. В настоящее время она идет сверху вниз.


person androidevil    schedule 23.11.2012    source источник


Ответы (3)


Вы можете использовать ScaleAnimation.

Например, измените макет так, чтобы поверхность занимала весь экран:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<SurfaceView
    android:id="@+id/surface"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="0dp"
    android:background="@color/red"
     />

And then scale it on Y-axis from 0 to 1:

    SurfaceView surface = (SurfaceView) findViewById(R.id.surface);

    ScaleAnimation animation = new ScaleAnimation(1.0f, 1.0f, 0.0f, 1.0f);
    animation.setDuration(5000);
    surface.startAnimation(animation);
person sdabet    schedule 23.11.2012
comment
Спасибо, но в этом случае он все еще идет снизу вверх. Какие ценности я должен изменить? - person androidevil; 23.11.2012
comment
О, я не понял. Смотрите мой новый ответ тогда - person sdabet; 23.11.2012
comment
Спасибо. Думаю теперь получится. Но в чем преимущество использования ScaleAnimation вместо TranslateAnimation? - person androidevil; 24.11.2012

Вы можете сделать это с помощью TranslateAnimation следующим образом:

    final SurfaceView surface = (SurfaceView) findViewById(R.id.surface);

    surface.post(new Runnable() {
        @Override
        public void run() {
            TranslateAnimation translation = new TranslateAnimation(0f, 0f, surface.getHeight(), 0f);
            translation.setDuration(2000);
            surface.startAnimation(translation);
        }
    });
person sdabet    schedule 23.11.2012
comment
Спасибо. Но в чем преимущество использования TranslateAnimation вместо ScaleAnimation? - person androidevil; 24.11.2012

Вы можете сделать это, комбинируя масштабирование и анимацию преобразования. Анимация преобразования поможет в изменении положения представления, а масштабирование в анимации поможет в изменении размера. И в вашем коде используйте интерполятор Accelerate_Decelerate. Интерполятор даст нужный эффект. Вы можете попробовать различные типы доступных интерполяторов для достижения эффекта.

person Priety    schedule 23.11.2012
comment
Спасибо. Я попробую использовать это. После того, как я оставлю отзыв. - person androidevil; 24.11.2012
comment
Конечно. Но используйте интерполяторы и экспериментируйте с каждым из типов интерполяторов. Это даст вам желаемое решение. Дайте мне знать, если он получит желаемое решение. - person Priety; 24.11.2012