片段事务后启动ObjectAnimator

时间:2016-08-03 21:52:32

标签: android android-fragments fragment fragmenttransaction 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()方法放在了fragmnet的onResume上,但它没有用。

2 个答案:

答案 0 :(得分:1)

这是因为scrollTxt.getWidth()中的onResume()为零,因为您的片段视图层次结构还没有被测量过。作为解决方案,您可以通过调用scrollTxt.post()将动画开始推迟到下一个布局过程。

试试这个:

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

答案 1 :(得分:1)

scrollTxt.getWidth()返回0,它在onResume()中尚未测量

尝试:

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

在mainFragment的onViewCreated