Как выполнить анимацию затухания при переходе активности?
Я кодифицирую эффект перехода между моей активностью в отношении логотипа и моей основной активностью, но у меня есть проблема, которая перед исчезновением действия переместится вверх:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<alpha
android:duration="2000"
android:fromAlpha="0.0"
android:toAlpha="1.0" >
</alpha>
</set>
Как я могу улучшить этот код, чтобы получить только эффект исчезновения?
Ответы
Ответ 1
Вы можете создать свои собственные файлы анимации .xml для постепенного исчезновения в новом Activity
и исчезновения текущего Activity
:
fade_in.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="500" />
fade_out.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:fillAfter="true"
android:duration="500" />
Используйте его в таком коде: (Внутри вашей Activity
)
Intent i = new Intent(this, NewlyStartedActivity.class);
startActivity(i);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
Приведенный выше код будет затенять текущую активную Activity
и исчезать во вновь запущенной Activity
приведет к плавному переходу.
ОБНОВЛЕНИЕ: @Dan J указал, что использование встроенной анимации Android повышает производительность, что я действительно обнаружил, что после некоторого тестирования. Если вы предпочитаете работать со встроенной анимацией, используйте:
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Заметьте, что я android.R
вместо R
для доступа к идентификатору ресурса.
ОБНОВЛЕНИЕ: В настоящее время обычной практикой является выполнение переходов с использованием класса Transition, представленного на уровне API 19.
Ответ 2
вы также можете добавить анимацию в свою деятельность, в методе onCreate, как показано ниже, потому что overridePendingTransition не работает с некоторыми мобильными устройствами или зависит от настроек устройства...
View view = findViewById(android.R.id.content);
Animation mLoadAnimation = AnimationUtils.loadAnimation(getApplicationContext(), android.R.anim.fade_in);
mLoadAnimation.setDuration(2000);
view.startAnimation(mLoadAnimation);
Ответ 3
Просто переиздайте ответ oleynikd, потому что он простой и аккуратный
Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(),
android.R.anim.fade_in, android.R.anim.fade_out).toBundle();
startActivity(intent, bundle);
Ответ 4
Вы также можете использовать этот код в своем файле style.xml, чтобы вам больше ничего не нужно было писать в своей деятельности.
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowAnimationStyle">@style/AppTheme.WindowTransition</item>
</style>
<!-- Setting window animation -->
<style name="AppTheme.WindowTransition">
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
Ответ 5
Поместите строку ниже сразу после вашего setContentView:
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Он добавит анимацию постепенного появления и исчезновения в вашу деятельность. Анимации уже даны системой Android, поэтому нет необходимости воссоздавать.
Надеюсь, это поможет вам :)