wake-up-neo.net

Aktivitätswechsel in Android

Wie kann ich den Übergang zwischen zwei Aktivitäten für Android 1.5 und höher definieren? Ich möchte, dass eine Aktivität eingeblendet wird.

177
hpique

Sie können dies mit Activity.overridePendingTransition() tun. Sie können einfache Übergangsanimationen in einer XML-Ressourcendatei definieren.

161
iandisme

Hier ist der Code, um ein Nice-Smooth-Fade zwischen zwei Aktivitäten durchzuführen.

Erstellen Sie eine Datei mit dem Namen fadein.xml in 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" />

Erstellen Sie eine Datei mit dem Namen fadeout.xml in 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" />

Wenn Sie von Aktivität A nach Aktivität B ausblenden möchten, geben Sie Folgendes in die onCreate()-Methode für Aktivität B ein. Bevor setContentView() für mich funktioniert.

overridePendingTransition(R.anim.fadein, R.anim.fadeout);

Wenn die Überblendungen für Sie zu langsam sind, ändern Sie Android:duration in den obigen XML-Dateien in einen kleineren Wert.

180
Ben Clayton

Ein einfacher Weg, dies zu tun, ist:

  1. Erstellen Sie einen Animationsstil in Ihrer Datei styles.xml
<style name="WindowAnimationTransition">
    <item name="Android:windowEnterAnimation">@Android:anim/fade_in</item>
    <item name="Android:windowExitAnimation">@Android:anim/fade_out</item>
</style>
  1. Fügen Sie diesen Stil Ihrem App-Design hinzu
<style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar">
      <item name="Android:windowAnimationStyle">@style/WindowAnimationTransition</item>
</style>

Das ist es :)

40
Felipe Conde

Ja. Sie können dem Betriebssystem mitteilen, welche Art von Übergang Sie für Ihre Aktivität wünschen.

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    getWindow().setWindowAnimations(ANIMATION);

    ...

}

Wobei ANIMATION eine ganze Zahl ist, die sich auf eine integrierte Animation im Betriebssystem bezieht.

31
CaseyB

Eine Liste der Standardanimationen finden Sie unter: http://developer.Android.com/reference/Android/R.anim.html

Es gibt tatsächlich fade_in und fade_out für API-Ebene 1 und höher.

29
Kevin C. Krinke

erstellen Sie 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" />

erstellen Sie 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" />

In res> values> styles.xml 

<style name="Fade">
        <item name="Android:windowEnterAnimation">@anim/fadein</item>
        <item name="Android:windowExitAnimation">@anim/fadeout</item>
    </style>

In Aktivitäten onCreate ()

getWindow().getAttributes().windowAnimations = R.style.Fade;
28
IceSteve

Hier ist der Code für ein Nice-Smooth zwischen zwei Aktivitäten.

  1. glatter Effekt von links nach rechts

    Erstellen Sie eine Datei mit den Namen slide_in_right.xml und slide_out_right.xml in 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>
    
  2. glatte Wirkung von rechts nach links

    Erstellen Sie eine Datei mit dem Namen animation_enter.xml und 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>
    
  3. Navigieren Sie von einer Aktivität zur zweiten Aktivität

       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.Halten Sie auf der Rückseite die Option Ereignis gedrückt oder navigieren Sie von der zweiten Aktivität zu einer Aktivität

     Intent home_intent = new Intent(Second_Activity.this, One_Activity.class);
     overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave);
     startActivity(home_intent);
     finish();
    
22
sachin pangare

Ich überschreibe meine Standardaktivitätsanimation. Ich teste es in api 15, dass es reibungslos funktioniert. Hier ist die Lösung, die ich verwende:

<!-- 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>

Erstellen Sie einen anim-Ordner unter res-Ordner und erstellen Sie dann diese vier Animationsdateien:

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>

Sie können mein Beispielprojekt herunterladen .

Das ist alles... :)

19

Sie können overridePendingTransition nicht in Android 1.5 verwenden. overridePendingTransistion kam auf Android 2.0.

Wenn Sie dies ohne Fehler durchgehen, müssen Sie das Ziel (1.5 oder höher) mit den üblichen Animationen (oder Ihren eigenen Animationen) kompilieren oder das Ziel (2.0 oder höher) mit overridePendingTransistion kompilieren.

Zusammenfassung: Sie können overridePendingTransistion nicht in Android 1.5 verwenden.

Sie können jedoch die integrierten Animationen im Betriebssystem verwenden.

4
Curtain

IN GALAXY-Geräten:

Sie müssen sicherstellen, dass Sie das Gerät nicht mithilfe von Einstellungen> Entwickleroptionen deaktiviert haben:

two muppets

2
Maher Ismaail

Bevor Sie Ihre Absicht beginnen:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(AlbumListActivity.this);
startActivity(intent, options.toBundle());

Dies gibt dem Aktivitätsübergang eine Standardanimation.

1
devDeejay

Verwenden Sie die API ActivityCompat.startActivity () works> 21.

    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
    ActivityCompat.startActivity(activity, intent, options.toBundle());
1

Einige Android-Versionen unterstützen benutzerdefinierte Activity-Übergänge, andere nicht (ältere Geräte). Wenn Sie benutzerdefinierte Übergänge verwenden möchten, sollten Sie prüfen, ob die Activity die overridePendingTransition()-Methode hat, wie dies bei älteren Versionen der Fall ist.

Um zu wissen, ob die Methode existiert oder nicht, kann eine Reflection-API verwendet werden. Hier ist der einfache Code, der die Methode überprüft und zurückgibt, wenn sie existiert:

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 */
    } 

Und dann können wir unseren eigenen Übergang anwenden, d. H. Diese Methode verwenden, falls vorhanden: 

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();
               }
            }

Hier wurden zum Beispiel einfache Einblend- und Ausblendanimationen für die Übergangsdemonstration verwendet.

0
Serj Ardovic

animation verkleinern

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" />
0
user8356857