9

Nous y voilà: deux activités avec une transition d'élément partagé (bouton). Le deuxième Activity a une TextInputLayout avec un soupçon:Problème de transition de l'élément partagé TextInputLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:app="http://schemas.android.com/apk/res-auto" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:focusable="true" 
       android:focusableInTouchMode="true" 
       android:gravity="center_horizontal" 
       android:orientation="vertical"> 

    <Button android:layout_width="wrap_content" android:layout_height="wrap_content" 
      android:text="GO" 
      android:transitionName="test"/> 

    <android.support.design.widget.TextInputLayout android:layout_width="match_parent" 
                android:layout_height="wrap_content" 
                android:hint="WTF?!"> 
     <android.support.design.widget.TextInputEditText android:layout_width="match_parent" 
                 android:layout_height="wrap_content"/> 
    </android.support.design.widget.TextInputLayout> 
</LinearLayout> 

L'entrer dans la transition de la deuxième Activity est retardée pour clarifier le problème: l'indice du TextInputLayout ignore l'animation de transition et affiché immédiatement après la transition commence. À la fin de l'animation, vous pouvez voir l'arrière-plan EditText correctement animé (ligne horizontale) sous l'indice. Est-ce un bug ou est-ce que je manque quelque chose? Voici la deuxième Activity:

public class SecondActivity extends AppCompatActivity { 

    public static void launch(Activity activity, View sharedElement) { 
     Intent intent = new Intent(activity, SecondActivity.class); 

     ActivityOptionsCompat options = ActivityOptionsCompat. 
       makeSceneTransitionAnimation(activity, sharedElement, "test"); 
     activity.startActivity(intent, options.toBundle()); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      getWindow().setEnterTransition(new Slide().setDuration(5000)); 
     } 
    } 
} 

EDIT: Ce bug peut être « fixe » en ajoutant un arrière-plan de la mise en page de la deuxième activité.

without backgroundwith background

+0

Quel est votre élément partagé? Qu'attendez-vous qu'il se passe? – azizbekian

+0

L'élément partagé est le bouton, comme vous pouvez le voir dans l'exemple de code. L'attente est, que l'indice de TextInputLayout est correctement animé comme une partie de la transition d'activité, comme le reste de la vue (regardez la transition appropriée de l'arrière-plan EditText dans la vidéo). – artkoenig

+0

S'il vous plaît, clarifiez votre question. Votre GIF animé a l'air bien, nous l'avons. C'est une animation plutôt cool. Mais je ne peux pas comprendre, quel est le problème? où est-ce? Ce que je vois si la ligne bleue remonte. C'est tout. Et puis une courte ligne clignote sous le champ de saisie. Est-ce prévu? Est-ce que ce n'est pas prévu? Wtf? – babay

Répondre

0

Je pense que son bug de TextInputLayout. Je l'ai enlevé et j'ai donné l'indice à TextInputEditText et cela a fonctionné comme prévu.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:gravity="center_horizontal" 
    android:orientation="vertical"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="GO" 
     android:transitionName="test" /> 


    <android.support.design.widget.TextInputEditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="WTF?!" /> 

</LinearLayout> 
0

Semble être un bug. J'ai soumis un new issue.

Vous pouvez éviter cela en définissant un android:background pour la deuxième activité.

0

API pour 21+

android:transitionGroup="true" 

Ajouter cette ligne dans TextInputLayout. Cela le réparerait. Ou si vous avez quelques TextInputLayout alors ajoutez cette ligne à leur conteneur.