Android - Gedeelde elementovergangen met afwerking van oproepactiviteit ()

Ik ben bezig met het maken van een applicatie meer materiaal en ik ben gewoon vast aan het implementeren van enkele gedeelde elementovergangen. Ik heb een activiteit A die begint met een andere B en vervolgens eindigt() om deze uit de back-stack te verwijderen. In mijn geval heb ik een element dat ik wil delen tussen de twee activiteiten, maar als het eenmaal is doorgegeven van A naar B, doet A er niet meer toe. Als ik niet aan het einde finish() na startActivity (ctx, intentie, bundel) werkt de exit/enter-animatie perfect. Als ik echter wel call finish, is er echt een lelijke flikkering voordat de animatie start.

Is er iets dat ik over het hoofd zie of is het gewoon niet mogelijk om te doen wat ik probeer te doen?

24

10 antwoord

UPDATE

Veel betere en eenvoudigere manier

ActivityCompat. finishAfterTransition(this);

<3 support library.

22
toegevoegd
@ksarmalkar, finishAfterTransition roept niet finish aan nadat de overgang is voltooid; het roept gewoon finish onmiddellijk aan. Dus als u overgaat van activiteit A naar B en B fadeert, dan is A verdwenen, zodat het startscherm doorloopt (of mogelijk een andere activiteit). Opmerking: dit lijkt alleen te gebeuren wanneer gedeelde overgangen worden gebruikt.
toegevoegd de auteur David Murdoch, de bron
Ik kan geen finishWithTransition vinden. Dus ik probeerde finishAfterTransition en werkte ook niet.
toegevoegd de auteur guness, de bron
Het is in de ondersteunende bibliotheek. Probeer ook je targetSDK-versie tegen te komen
toegevoegd de auteur ksarmalkar, de bron
wat bedoel je met flikkeren? kun je wat GIF uploaden waar en post hier
toegevoegd de auteur ksarmalkar, de bron
geweldig, bedankt, bijgewerkt.
toegevoegd de auteur ksarmalkar, de bron
werkt niet, geen alternatief?
toegevoegd de auteur ViVekH, de bron
dit veroorzaakt nog steeds flikkering voor mij met behulp van een gedeeld element.
toegevoegd de auteur xsorifc28, de bron
De aanroep is eigenlijk: ActivityCompat.finishAfterTransition (this); Gewoon getest en het werkt geweldig.
toegevoegd de auteur Darren B, de bron
finishAfterTransition is gewoon een aanroep na de activiteitsovergang, de gedeelde elementen is een andere overgang en u moet de boolean -truc doen.
toegevoegd de auteur extmkv, de bron

UPDATE

Veel betere en eenvoudigere manier

ActivityCompat. finishAfterTransition(this);

<3 support library.

22
toegevoegd
@ksarmalkar, finishAfterTransition roept niet finish aan nadat de overgang is voltooid; het roept gewoon finish onmiddellijk aan. Dus als u overgaat van activiteit A naar B en B fadeert, dan is A verdwenen, zodat het startscherm doorloopt (of mogelijk een andere activiteit). Opmerking: dit lijkt alleen te gebeuren wanneer gedeelde overgangen worden gebruikt.
toegevoegd de auteur David Murdoch, de bron
Ik kan geen finishWithTransition vinden. Dus ik probeerde finishAfterTransition en werkte ook niet.
toegevoegd de auteur guness, de bron
Het is in de ondersteunende bibliotheek. Probeer ook je targetSDK-versie tegen te komen
toegevoegd de auteur ksarmalkar, de bron
wat bedoel je met flikkeren? kun je wat GIF uploaden waar en post hier
toegevoegd de auteur ksarmalkar, de bron
geweldig, bedankt, bijgewerkt.
toegevoegd de auteur ksarmalkar, de bron
werkt niet, geen alternatief?
toegevoegd de auteur ViVekH, de bron
dit veroorzaakt nog steeds flikkering voor mij met behulp van een gedeeld element.
toegevoegd de auteur xsorifc28, de bron
De aanroep is eigenlijk: ActivityCompat.finishAfterTransition (this); Gewoon getest en het werkt geweldig.
toegevoegd de auteur Darren B, de bron
finishAfterTransition is gewoon een aanroep na de activiteitsovergang, de gedeelde elementen is een andere overgang en u moet de boolean -truc doen.
toegevoegd de auteur extmkv, de bron

UPDATE

Veel betere en eenvoudigere manier

ActivityCompat. finishAfterTransition(this);

<3 support library.

22
toegevoegd
@ksarmalkar, finishAfterTransition roept niet finish aan nadat de overgang is voltooid; het roept gewoon finish onmiddellijk aan. Dus als u overgaat van activiteit A naar B en B fadeert, dan is A verdwenen, zodat het startscherm doorloopt (of mogelijk een andere activiteit). Opmerking: dit lijkt alleen te gebeuren wanneer gedeelde overgangen worden gebruikt.
toegevoegd de auteur David Murdoch, de bron
Ik kan geen finishWithTransition vinden. Dus ik probeerde finishAfterTransition en werkte ook niet.
toegevoegd de auteur guness, de bron
wat bedoel je met flikkeren? kun je wat GIF uploaden waar en post hier
toegevoegd de auteur ksarmalkar, de bron
Het is in de ondersteunende bibliotheek. Probeer ook je targetSDK-versie tegen te komen
toegevoegd de auteur ksarmalkar, de bron
geweldig, bedankt, bijgewerkt.
toegevoegd de auteur ksarmalkar, de bron
werkt niet, geen alternatief?
toegevoegd de auteur ViVekH, de bron
dit veroorzaakt nog steeds flikkering voor mij met behulp van een gedeeld element.
toegevoegd de auteur xsorifc28, de bron
De aanroep is eigenlijk: ActivityCompat.finishAfterTransition (this); Gewoon getest en het werkt geweldig.
toegevoegd de auteur Darren B, de bron
finishAfterTransition is gewoon een aanroep na de activiteitsovergang, de gedeelde elementen is een andere overgang en u moet de boolean -truc doen.
toegevoegd de auteur extmkv, de bron

U kunt uw activiteit beëindigen in de onStop-functie, als u alleen wilt dat dit gebeurt wanneer u van A naar B overgaat, maak dan een vlag en stel deze in nadat u startActivity (ctx, opzet, bundel) hebt gebeld:

@Override
public void onStop() {
    super.onStop();
    if(mShouldFinish)
         finish();
}

Zorg ervoor dat wanneer u klaar bent met activiteit B om eindigen() te bellen en niet finishAfterTranstion() omdat activiteit A er niet meer is

Nadat de activiteit A is voltooid, kan het gedeelde element in B in het scherm blijven hangen als u op Back drukt. Stel transitionName in op null in ActivityB.onEnterAnimationComplete om dit te voorkomen.

21
toegevoegd
Dit werkt niet voor mij, de gedeelde element-overgang is niet correct als ik dit doe. Alles is in orde als ik activiteit A niet voltooi, maar ik wil dit doen nadat de overgang is voltooid. Kan dit niet laten werken.
toegevoegd de auteur Gabor Peto, de bron

U kunt uw activiteit beëindigen in de onStop-functie, als u alleen wilt dat dit gebeurt wanneer u van A naar B overgaat, maak dan een vlag en stel deze in nadat u startActivity (ctx, opzet, bundel) hebt gebeld:

@Override
public void onStop() {
    super.onStop();
    if(mShouldFinish)
         finish();
}

Zorg ervoor dat wanneer u klaar bent met activiteit B om eindigen() te bellen en niet finishAfterTranstion() omdat activiteit A er niet meer is

Nadat de activiteit A is voltooid, kan het gedeelde element in B in het scherm blijven hangen als u op Back drukt. Stel transitionName in op null in ActivityB.onEnterAnimationComplete om dit te voorkomen.

21
toegevoegd
Dit werkt niet voor mij, de gedeelde element-overgang is niet correct als ik dit doe. Alles is in orde als ik activiteit A niet voltooi, maar ik wil dit doen nadat de overgang is voltooid. Kan dit niet laten werken.
toegevoegd de auteur Gabor Peto, de bron

U kunt uw activiteit beëindigen in de onStop-functie, als u alleen wilt dat dit gebeurt wanneer u van A naar B overgaat, maak dan een vlag en stel deze in nadat u startActivity (ctx, opzet, bundel) hebt gebeld:

@Override
public void onStop() {
    super.onStop();
    if(mShouldFinish)
         finish();
}

Zorg ervoor dat wanneer u klaar bent met activiteit B om eindigen() te bellen en niet finishAfterTranstion() omdat activiteit A er niet meer is

Nadat de activiteit A is voltooid, kan het gedeelde element in B in het scherm blijven hangen als u op Back drukt. Stel transitionName in op null in ActivityB.onEnterAnimationComplete om dit te voorkomen.

21
toegevoegd
Dit werkt niet voor mij, de gedeelde element-overgang is niet correct als ik dit doe. Alles is in orde als ik activiteit A niet voltooi, maar ik wil dit doen nadat de overgang is voltooid. Kan dit niet laten werken.
toegevoegd de auteur Gabor Peto, de bron

Dit is misschien laat, maar ik had hetzelfde probleem. Wat voor mij werkte, is:

supportFinishAfterTransition();

Dit is opgenomen in de ondersteuningsbibliotheek en werkt als charme.

PS: u hoeft finish() niet aan te roepen wanneer u supportFinishAfterTransition() aanroept.

3
toegevoegd

Dit is misschien laat, maar ik had hetzelfde probleem. Wat voor mij werkte, is:

supportFinishAfterTransition();

Dit is opgenomen in de ondersteuningsbibliotheek en werkt als charme.

PS: u hoeft finish() niet aan te roepen wanneer u supportFinishAfterTransition() aanroept.

3
toegevoegd

Dit is misschien laat, maar ik had hetzelfde probleem. Wat voor mij werkte, is:

supportFinishAfterTransition();

Dit is opgenomen in de ondersteuningsbibliotheek en werkt als charme.

PS: u hoeft finish() niet aan te roepen wanneer u supportFinishAfterTransition() aanroept.

3
toegevoegd

Probeer de methode finishAfterTransition() in 5.0 en hoger om de activiteit te voltooien nadat de overgangsoverdracht is opgetreden.

2
toegevoegd