【问题标题】:Fragment setCustomAnimations() not working well?片段 setCustomAnimations() 不能正常工作?
【发布时间】:2015-10-16 03:21:22
【问题描述】:

我在使用fragmentTransaction.setCustomAnimations(R.animator.slide_in_down, R.animator.slide_out_down)时遇到了一些问题,当我希望两个片段顺利滑下时,in-fragmentout-fragment完成slide_out_down的动画师之后立即出现,当我更换动画师时希望两个片段平滑向上滑动,in-fragmentout-fragment 开始动画之前立即消失。

看起来像这张照片

为什么?如何解决?


还有更多细节。

我有一个列表视图,屏幕左侧有三个项目,右侧有三个片段,一个片段一个项目。

样样

MyActivity 中,我初始化onCreate() 中的所有片段

private void createFragment(int initPosition) {
     mFragment[0] = new Fragment();
     mFragment[1] = new Fragment();
     mFragment[2] = new Fragment();

     mFragmentManager = getFragmentManager();
     mFragmentTransaction = mFragmentManager.beginTransaction();
     mFragmentTransaction.add(R.id.content_layout, mFragment[initPosition]);
     mFragmentTransaction.commit();
}

我为列表视图设置了一个onItemSelectedListener,当列表视图更改它的选择时,称为replaceFragment(int fromPos, int toPos)

private void replaceFragment(int fromPos, int toPos) {
    if(fromPos != toPos) {
        mFragmentTransactoin = mFragmentManager.beginTransaction();

        //add animator
        if (fromPos < toPos) {
            mFragmentTransaction.setCustomAnimations(R.animator.slide_in_up, R.animator.slide_out_up);
        } else {
            mFragmentTransaction.setCustomAnimations(R.animator.slide_in_down, R.animator.slide_out_down);
        }

        if (!mFragments[toPos].isAdded()) {
            mFragmentTransaction.add(R.id.content_layout, mFragments[toPos]);
        }
        mFragmentTransaction.show(mFragments[toPos]);
        mFragmentTransaction.hide(mFragments[toPos]);
        mFragmentTransaction.commit();
    }
}

为什么不使用replace(),因为replace()导致out-fragment被破坏,in-fragment每次都会初始化。这很糟糕。show()hide() 可以避免这种情况。


动画师代码:

slide_in_up.xml

<objectAnimator
    android:valueFrom="1280"
    android:valueTo="0"
    android:propertyName="translationY"
    android:duration="800"/>


slide_out_up.xml

<objectAnimator
    android:valueFrom="0"
    android:valueTo="-1280"
    android:propertyName="translationY"
    android:duration="800"/>


slide_in_down.xml

<objectAnimator
    android:valueFrom="-1280"
    android:valueTo="0"
    android:propertyName="translationY"
    android:duration="800"/>


slide_out_down.xml

<objectAnimator
    android:valueFrom="0"
    android:valueTo="1280"
    android:propertyName="translationY"
    android:duration="800"/>

感谢任何回复。

【问题讨论】:

    标签: android animation transactions fragment


    【解决方案1】:
    mFragmentTransaction.hide(mFragments[toPos]);
    //need change to  
    mFragmentTransaction.hide(mFragments[fromPos]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2013-03-30
      • 2010-11-30
      • 2021-10-02
      相关资源
      最近更新 更多