Відповіді:
Ви можете це зробити за допомогою 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()
. Мені вдалося отримати приємне вицвітання таким чином, зателефонувавши йому відразу після запуску нової діяльності.
Навіть простий спосіб зробити це:
<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);
...
}
Де АНІМАЦІЯ - це ціле число, що відноситься до вбудованої анімації в ОС.
створити 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>
У заходах onCreate ()
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>
Створіть папку анімації в папці 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
одразу після запускуActivity: developer.android.com/reference/android/app/…
Ви не можете використовувати overridePendingTransition в Android 1.5. overridePendingTransistion прийшов на Android 2.0.
Якщо ви збираєтеся пройти це без будь-якої помилки, вам доведеться компілювати ціль (1,5 або вище), використовуючи звичайні анімації (або у вас є), або вам доведеться компілювати для цілі (2.0 або вище) за допомогою overridePendingTransistion.
Підсумок: Ви не можете використовувати overridePendingTransistion в Android 1.5 .
Однак ви можете використовувати вбудовані анімації в ОС.
У пристроях GALAXY:
Потрібно переконатися, що ви не вимкнули його на пристрої, використовуючи Налаштування> Параметри розробника:
Використовуйте API ActivityCompat.startActivity () працює> 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)
якщо взагалі немає анімації.