0

i ont cette méthode pour faire défiler mon textview de gauche à droite:Démarrer ObjectAnimator après transaction fragment

public void scrollText() { 
    float startX = 0 - scrollTxt.getWidth(); 
    float endX = scrollTxt.getWidth(); 
    ObjectAnimator anim = ObjectAnimator.ofFloat(scrollTxt, View.X, startX, endX); 
    anim.setRepeatCount(ValueAnimator.INFINITE); 
    anim.setRepeatMode(ValueAnimator.RESTART); 
    anim.setDuration(9000); 
    anim.start(); 
} 

cette méthode et l'textview sont dans un fragment. j'ajoute ce fragment dans mon activité avec ce code:

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

    drawer = (DrawerLayout) findViewById(R.id.activity_main_drawer); 

    MainFragment mainFragment = new MainFragment(); 
    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.add(R.id.activity_main_frame, mainFragment); 
    ft.commit(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.activity_main_nav); 
    navigationView.setNavigationItemSelectedListener(new MainNavigationListener(drawer)); 
} 

Je veux commencer l'animation quand fragmnet ajouté. J'ai mis la méthode scrollText() dans onResume de fragmnet mais cela n'a pas fonctionné.

Répondre

1

Cela se produit car scrollTxt.getWidth() est zéro dans onResume() car votre hiérarchie de vue de fragment n'a pas encore été mesurée. En tant que solution, vous pouvez reporter le démarrage de l'animation au passage de mise en page suivant en appelant le scrollTxt.post().

Essayez ceci:

@Override 
public void onResume() { 
    super.onResume(); 
    scrollTxt.post(new Runnable() { 
     @Override public void run() { 
      scrollText(); 
     } 
    }); 
} 
+1

Merci! Ça marche. mais je pense que vous oubliez d'ajouter ** super.onResume(); **. il peut poser problème pour les utilisateurs qui copient juste cette réponse. –

+0

Merci d'avoir signalé cela. Je viens de mettre à jour ma réponse. –

1

scrollTxt.getWidth() renvoie 0, ce n'est pas encore mesuré dans onResume()

essayer avec:

scrollTxt.post(new Runnable() { 
     @Override 
     public void run() { 
      scrollText(); 
     } 
    }); 

dans onViewCreated de mainFragment