Odpowiedzi:
Możesz to zrobić za pomocą Activity.overridePendingTransition()
. Możesz zdefiniować proste animacje przejścia w pliku zasobów XML.
onCreate
funkcji Aktywności .
Oto kod umożliwiający płynne przejście między dwiema aktywnościami ..
Utwórz plik o nazwie fadein.xml
inres/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" />
Utwórz plik o nazwie fadeout.xml
inres/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" />
Jeśli chcesz znikną z Aktywny A na aktywność B , należy umieścić następującą informację w onCreate()
sposób aktywny B . Przedtem setContentView()
działa dla mnie.
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
Jeśli przejścia są zbyt wolne, zmień android:duration
powyższe pliki xml na coś mniejszego.
overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);
tych plików może również dać ci wskazówki, jak ulepszyć niestandardowe animacje (np. Dzięki temu, że wyciszanie będzie trwać dłużej niż wygaszanie).
fadein
i fadeout
do fade_in
i fade_out
. Z postu Dana J
overridePendingTransition()
zaraz po telefonie finish()
i / lub startActivity()
. W ten sposób udało mi się uzyskać ładny zanik, nazywając go zaraz po uruchomieniu nowego działania.
Jeszcze łatwym sposobem na to jest:
<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>
Otóż to :)
Tak. Możesz powiedzieć systemowi operacyjnemu, jaki rodzaj przejścia chcesz zastosować w swojej działalności.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setWindowAnimations(ANIMATION);
...
}
Gdzie ANIMACJA jest liczbą całkowitą odnoszącą się do wbudowanej animacji w systemie operacyjnym.
utwórz 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" />
utwórz 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" />
W res> wartości> styles.xml
<style name="Fade">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
W działaniach onCreate ()
getWindow().getAttributes().windowAnimations = R.style.Fade;
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Aby wyświetlić listę domyślnych animacji, zobacz: http://developer.android.com/reference/android/R.anim.html
Jest w rzeczywistości fade_in
i fade_out
na poziomie API 1 roku.
Nadpisuję moją domyślną animację aktywności. Testuję go w API 15, aby działał sprawnie. Oto rozwiązanie, którego używam:
<!-- 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>
Utwórz folder anim w folderze res, a następnie utwórz następujące cztery pliki animacji:
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>
Możesz pobrać mój przykładowy projekt .
To wszystko... :)
Oto kod umożliwiający płynne wykonywanie dwóch czynności.
płynny efekt od lewej do prawej
Utwórz plik o nazwie slide_in_right.xml i slide_out_right.xml w 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>
płynny efekt od prawej do lewej
Utwórz plik o nazwie animation_enter.xml i animation_leave.xml w res / anim
animacja_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>
animacja_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>
Nawiguj od jednego działania do drugiego
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. Na wstecz naciśnij zdarzenia lub przejdź z drugiego działania do jednego działania
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
natychmiast po starcieActivity: developer.android.com/reference/android/app/…
Nie można użyć funkcji overridePendingTransition w systemie Android 1.5. overridePendingTransistion przyszedł do Androida 2.0.
Jeśli przejdziesz przez to bezbłędnie, musisz skompilować dla celu (1.5 lub wyżej) używając zwykłych animacji (lub twoich) lub musisz skompilować dla celu (2.0 lub wyżej) używając overridePendingTransistion.
Podsumowanie: Nie można użyć funkcji overridePendingTransistion w systemie Android 1.5 .
Możesz jednak użyć wbudowanych animacji w systemie operacyjnym.
W urządzeniach GALAXY:
Musisz upewnić się, że nie wyłączyłeś go w urządzeniu, wybierając Ustawienia> Opcje programisty:
Użyj ActivityCompat.startActivity () działa API> 21.
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
ActivityCompat.startActivity(activity, intent, options.toBundle());
Niektóre wersje Androida obsługują niestandardowe Activity
przejścia, a niektóre nie (starsze urządzenia). Jeśli chcesz używać niestandardowych przejść, dobrą praktyką jest sprawdzenie, czy Activity
ma tę overridePendingTransition()
metodę, jak w starszych wersjach nie.
Aby wiedzieć, czy metoda istnieje, czy nie, można użyć interfejsu API refleksji. Oto prosty kod, który sprawdzi i zwróci metodę, jeśli istnieje:
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 */
}
Następnie możemy zastosować własne przejście, tj. Użyć tej metody, jeśli istnieje:
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();
}
}
Tutaj, jako przykład, zastosowano proste animacje pojawiania się i zanikania do demonstracji przejścia.
pomniejszyć animację
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
powiązanych odpowiedzi poniżej: Możesz przekazać,(0, 0)
jeśli nie chcesz żadnej animacji.