0

у меня есть этот метод, чтобы прокрутить мою TextView слева направо:Start ObjectAnimator после фрагмента сделки

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

этот метод и TextView в фрагменте. Я добавлю этот фрагмент в свою деятельность с помощью этого кода:

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

Я хочу начать анимацию, когда добавлено fragmnet. Я положил метод scrollText() в onResume fragmnet, но это не сработало.

ответ

1

Это происходит потому, что scrollTxt.getWidth() равно нулю в onResume(), потому что иерархия представления фрагментов еще не измерена. В качестве решения вы можете отложить начало анимации до следующего макета, вызвав scrollTxt.post().

Попробуйте это:

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

благодаря! оно работает. , но я думаю, вы забыли добавить ** super.onResume(); **. это может вызвать проблемы для пользователей, которые просто копируют этот ответ. –

+0

Спасибо, что указали это. Я только что обновил свой ответ. –

1

scrollTxt.getWidth() возвращает 0, это еще не измерено в onResume()

попробуйте:

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

в onViewCreated mainFragment в