14 ответов:
вы можете сделать это с помощью
Activity.overridePendingTransition(). Вы можете определить простые анимации перехода в файле ресурсов XML.
вот код, чтобы сделать красивый плавный переход между двумя видами деятельности..
создайте файл с именем fadein.xml в res / anim
<?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="2000" />создайте файл с именем fadeout.xml в res / anim
<?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:duration="2000" />Если вы хотите перейти от действия A к действию B, поместите следующее В метод onCreate для действия B. прежде чем setContentView будет работать для меня.
overridePendingTransition(R.anim.fadein, R.anim.fadeout);Если исчезает слишком медленно для вас, измените android: продолжительность в xml-файлах выше, чтобы что-то поменьше.
еще простой способ сделать это:
- Создайте стиль анимации в ваших стилях.xml-файл
<style name="WindowAnimationTransition"> <item name="android:windowEnterAnimation">@android:anim/fade_in</item> <item name="android:windowExitAnimation">@android:anim/fade_out</item> </style>
- добавьте этот стиль в тему вашего приложения
<style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar"> <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item> </style>вот именно :)
да. Вы можете сказать ОС, какой переход вы хотите иметь для своей деятельности.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setWindowAnimations(ANIMATION); ... }где анимация-это целое число, относящееся к встроенной анимации в ОС.
список анимаций по умолчанию см.:http://developer.android.com/reference/android/R.anim.html
есть на самом деле
fade_inиfade_outдля API уровня 1 и выше.
создать res>anim>fadein.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" />создать res>anim>затухание.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:duration="500" />в res > значения > стили.xml
<style name="Fade"> <item name="android:windowEnterAnimation">@anim/fadein</item> <item name="android:windowExitAnimation">@anim/fadeout</item> </style>в деятельности onCreate ()
getWindow().getAttributes().windowAnimations = R.style.Fade;
вот код, чтобы сделать хороший гладкий между двумя видами деятельности.
плавный эффект слева направо
создайте файл с именем slide_in_right.xml и slide_out_right.xml в res / anim
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <translate android:duration="5000" android:fromXDelta="100%" android:toXDelta="0%" /> <alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" /> </set>slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="-100%"/> <alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" /> </set>плавный эффект справа налево
создайте файл с именем animation_enter.xml и animation_leave.xml in res / anim
animation_enter.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="-100%" android:toXDelta="0%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="700"/> </set>animation_leave.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0%" android:toXDelta="100%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="700" /> </set>переход от одного действия ко второму действию
Intent intent_next=new Intent(One_Activity.this,Second_Activity.class); overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right); startActivity(intent_next); finish();4.На обратной стороне нажмите событие или перейдите от второго действия к одному действию
Intent home_intent = new Intent(Second_Activity.this, One_Activity.class); overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave); startActivity(home_intent); finish();
Я перезаписываю свою анимацию активности по умолчанию. Я тестирую его в api 15, что он работает гладко. Вот решение, которое я использую:
<!-- 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/colorPrimary</item> <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item> </style> <style name="CustomActivityAnimation" parent="@android:style/Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item> <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item> </style>создайте папку anim в папке res, а затем создайте эти четыре файла анимации:
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime"/> </set>slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="@android:integer/config_mediumAnimTime"/> </set>slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime"/> </set>slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="@android:integer/config_mediumAnimTime"/> </set>вы можете скачать моя образец проект.
вот и все... :)
вы не можете использовать overridePendingTransition в Android 1.5. overridePendingTransistion пришел на Android 2.0.
Если вы собираетесь пройти через это без каких-либо ошибок, вам нужно скомпилировать для цели (1.5 или выше) с использованием обычных анимаций (или у вас есть) или вам нужно скомпилировать для цели (2.0 или выше) с помощью overridePendingTransistion.
резюме: вы не можете использовать overridePendingTransistion в Android 1.5.
хотя вы можете используйте встроенные анимации в ОС.
в устройствах GALAXY:
вы должны убедиться, что вы не выключили его в устройстве, используя Настройки > Параметры разработчика:
Использовать ActivityCompat.startActivity () работает API > 21.
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE); ActivityCompat.startActivity(activity, intent, options.toBundle());
перед началом вашего намерения:
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(AlbumListActivity.this); startActivity(intent, options.toBundle());Это дает анимацию по умолчанию для вашего перехода деятельности.
некоторые версии Android поддерживают custom
Activityпереходы, а некоторые нет (старые устройства). Если вы хотите использовать пользовательские переходы, рекомендуется проверить, является лиActivityимеетoverridePendingTransition()метод, как и на более старых версиях это не так.чтобы узнать, существует ли метод или нет, можно использовать API отражения. Вот простой код, который будет проверять и возвращать метод, если он существует:
Method mOverridePendingTransition; try { mOverridePendingTransition = Activity.class.getMethod( "overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE } ); /* success */ } catch (NoSuchMethodException nsme) { /* failure, this version of Android doesn't have this method */ }и тогда мы можем применить наш собственный переход, т. е. использовать это метод, если он существует:
if (UIConstants.mOverridePendingTransition != null) { try { UIConstants.mOverridePendingTransition.invoke(MainActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }здесь, в качестве примера, для демонстрации перехода использовались простые анимации затухания и затухания..
увеличить анимацию
Intent i = new Intent(getApplicationContext(), LoginActivity.class); overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit); startActivity(i); finish();zoom_enter
<?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" />zoom_exit
<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" />

Comments