Ответы:
Вы можете сделать это с Activity.overridePendingTransition()
. Вы можете определить простые анимации перехода в файле ресурсов XML.
onCreate
.
Вот код для плавного плавного перехода между двумя активностями.
Создайте файл с именем 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" />
Если вы хотите , чтобы исчезнуть из активности А на активность B , поместите следующее в onCreate()
методе активности B . До setContentView()
меня работает.
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
Если замирания слишком медленные для вас, измените android:duration
приведенные выше xml-файлы на что-то меньшее.
overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);
просмотр этих файлов может также дать вам подсказки о том, как улучшить ваши собственные анимации (например, сделать затухание более продолжительным, чем затухание).
fadein
и fadeout
на fade_in
и fade_out
. Из поста Дэна Дж.
overridePendingTransition()
сразу после звонка finish()
и / или startActivity()
. Я смог добиться хорошего затухания таким образом, вызвав его сразу после запуска нового Activity.
Даже простой способ сделать это:
<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);
...
}
Где ANIMATION - это целое число, относящееся к встроенной анимации в ОС.
создать 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> fadeout.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> значения> styles.xml
<style name="Fade">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
В деятельности по созданию ()
getWindow().getAttributes().windowAnimations = R.style.Fade;
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Список анимаций по умолчанию смотрите: адресу http://developer.android.com/reference/android/R.anim.html.
Есть на самом деле fade_in
и fade_out
для API уровня 1 и выше.
Я перезаписываю анимацию активности по умолчанию. Я проверяю это в 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>
Вы можете скачать мой пример проекта .
Вот и все... :)
Вот код, чтобы сделать приятное сглаживание между двумя действиями.
плавный эффект слева направо
Создайте файл с именем 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 в 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();
overridePendingTransition
сразу после запуска. Активность: developer.android.com/reference/android/app/…
Вы не можете использовать 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());
Некоторые версии Android поддерживают пользовательские 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" />
overridePendingTransition
связанным ответам ниже: Вы можете пройти,(0, 0)
если вообще не хотите анимации.