прокрутить XML-анимацию при изменении активности в Android

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

Как применить анимацию слайдов между двумя действиями в Android?

Мне нужно знать, как сделать XML-анимацию слайдов активности. как то, что они сделали для постепенного появления и исчезновения.


person praveen kumar    schedule 11.08.2012    source источник
comment
Привет. Вы можете использовать fromYDelta и toYDelta в макете анимации... Предоставление значений от -100 до 0 и от 0 до 100 даст эффект скольжения вверх и вниз. И никогда не забывайте переопределять переход по умолчанию, вызывая метод overridePendingTransition. ХТХ,   -  person iDroid    schedule 11.08.2012
comment
Не ответ на ваш вопрос, но что-то, что может быть вам полезно: когда onBackPressed вы можете включить обратную анимацию (это сложнее для действий, противоположных фрагментам). Посмотрите этот пример   -  person P Kuijpers    schedule 10.06.2017


Ответы (4)


для слайд_в xml:

<translate 
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:duration="250" 
      android:fromXDelta="-100%p" 
      android:toXDelta="0%p">
</translate>

для слайд_аут xml:

<translate
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:duration="200" 
      android:fromXDelta="0" 
      android:toXDelta="100%p">
</translate>

Java-код:

Intent intent = new Intent(this, newActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);

поместите оба xml-файла в папку res/anim.

person Mansi    schedule 11.08.2012
comment
я меняю код. Вы попробуете этот новый xml-файл. Я надеюсь, что это решит вашу проблему - person Mansi; 11.08.2012
comment
Спасибо, что нашли время. На самом деле код, который вы дали, скользит слева направо. Мне нужно снизу вверх. - person praveen kumar; 11.08.2012
comment
вы должны настроить код в соответствии с вашими требованиями. для настройки вы должны изменить значение fromXDelta, toXDelta, fromYDelta и toYDelta - person Mansi; 11.08.2012
comment
Это работает идеально. Могу ли я узнать, как изменить задержку перехода? - person praveen kumar; 13.08.2012
comment
@praveenkumar измените android:duration на любую желаемую продолжительность в миллисекундах - person HendraWD; 20.09.2016

Принятый ответ — это не то, о чем задавался вопрос, а именно анимация, которая скользит снизу вверх и выскальзывает сверху.

pull_up_from_bottom.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime" 
    android:fromYDelta="100%"
    android:toYDelta="0%" />

push_out_to_bottom.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%"
    android:toYDelta="100%" />
person georgiecasey    schedule 02.12.2012
comment
Это действительно работает нормально, но когда вторая активность запускает анимацию, первая активность становится невидимой, а вторая активность скользит по черной области, что выглядит очень странно. Можем ли мы изменить это, например, когда 2-я активность скользит до 0%, тогда активность 1 должна стать невидимой. Этот эффект такой же, как в iOS PresentViewController, если вы имеете представление об iOS. - person Emy Stats; 10.09.2015
comment
@EmyStats Вы, вероятно, ищете подход, как я написал здесь: stackoverflow.com/questions/39711666/ (конечно, для YDelta вместо XDelta) - person P Kuijpers; 07.12.2016
comment
@EmyStats Я нашел решение, просто добавив ‹item name=android:windowIsTranslucent›true‹/item› в res/values/styles.xml в определении ‹style name=AppTheme› - person ivoroto; 29.01.2019

Это то, что я был после:

res/anim/slide_up.xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="100%"
android:toYDelta="0%" />

res/anim/slide_down.xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="0%"
android:toYDelta="0%" />

res/anim/slide_down_reverse.xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="0%"
android:toYDelta="0%" />

res/anim/slide_up_reverse.xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="0%"
android:toYDelta="100%" />

Ваша активность.kt

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setContentView(R.layout.your_layout)

    overridePendingTransition(R.anim.slide_up, R.anim.slide_down)
}

override fun finish() {
    super.finish()

    overridePendingTransition(R.anim.slide_down_reverse, R.anim.slide_up_reverse)
}
person Bitcoin Cash - ADA enthusiast    schedule 27.11.2019

Вы можете использовать приведенный ниже код для анимации перехода слайдов вверх.

startActivity(new Intent(MainActivity.this, DataSetActivity.class));
overridePendingTransition(R.anim.slide_out_bottom, R.anim.slide_in_bottom);

R.anim.slide_out_bottom

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:duration="250"
        android:fromXDelta="0%"
        android:fromYDelta="100%"
        android:toXDelta="0%"
        android:toYDelta="0%" />
</set>

R.anim.slide_in_bottom

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:duration="200"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="100%" />
</set>
person Mehul Boghra    schedule 24.02.2020