2015-05-20 455 views
-1

我正在創建自動播放幻燈片放映動畫。其中,它不只是幻燈片放映,它是重疊的幻燈片放映。問題與片段幻燈片動畫

含義,我有5組片段fragA,fragB,fragC,fragD,fragE。

首先,我希望fragA保持靜態(無動畫),它應該保持靜止0.5秒。之後,fragB應該滑過fragA。一旦fragB完成,fragA應該消失。 0.5秒後fragB啓動,fragC應該啓動。一旦fragC完成,fragB應該消失等等。

我發現,如果我在與Android的活動添加元素:name屬性,在弗拉加保持不變,而fragB在幻燈片

問題的空間。

但當fragB完成滑動,弗拉加彈出在屏幕上顯示,沒有看到B碎片。

所以,我在我的Fragment B中寫下了代碼,當動畫結束時,它應該從堆棧中移除fragA。但是當我執行下面的代碼時,沒有動畫發生,只顯示fragB。

@Override 
    public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) { 
     if(nextAnim == 0 || !enter) { 
      return super.onCreateAnimator(transit, enter, nextAnim); 
     } 
     Animator animator = AnimatorInflater.loadAnimator(getActivity(),nextAnim); 
     animator.addListener(new Animator.AnimatorListener() { 
      @Override 
      public void onAnimationStart(Animator animator) { 
       ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(getView(),new XFractionProperty(),1.0f,0.0f); 
       objectAnimator.setDuration(1600); 
       objectAnimator.setStartDelay(500); 
       objectAnimator.start(); 
      } 

      @Override 
      public void onAnimationEnd(Animator animator) { 
       FragmentManager fm = getActivity().getFragmentManager(); 
       fm.popBackStack("one",FragmentManager.POP_BACK_STACK_INCLUSIVE); 
      } 

      @Override 
      public void onAnimationCancel(Animator animator) { 

      } 

      @Override 
      public void onAnimationRepeat(Animator animator) { 

      } 
     }); 
     return animator; 
    } 

我創建類似下面的片段,

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     FirstFragment firstFragment = FirstFragment.newInstance("one"); 
     ft.add(R.id.frame, firstFragment); 
     ft.addToBackStack("one"); 

     ft.commit(); 

     final SecondFragment secondFragment = SecondFragment.newInstance("second"); 


     FragmentTransaction ft1 = getFragmentManager().beginTransaction(); 

     //ft1.show(firstFragment); 
     ft1.replace(R.id.frame, secondFragment); 
     ft1.setCustomAnimations(R.anim.slideinwithhalfasecdelay, R.anim.slideout); 
     //ft1.hide(firstFragment); 

     //ft1.addToBackStack("two"); 

     ft1.addToBackStack("two"); 
     //ft1.show(secondFragment); 
     ft1.commit(); 

我的動態代碼如下:

<LinearLayout 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 


    <fragment 
     android:id="@+id/frame" 
     android:name="clinicloud.com.slideshowtesting.FirstFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 
    </fragment> 


</LinearLayout> 

有人可以幫我解決這個問題?

好的,隨着Hasmukh的建議,我修改了代碼,它的工作。

FirstFragment firstFragment1 = FirstFragment.newInstance("first"); 

     Log.d(TAG, "****Adding first fragment"); 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     FirstFragment firstFragment = FirstFragment.newInstance("one"); 
     ft.add(R.id.frame, firstFragment); 
     ft.addToBackStack("one"); 
     ft.commit(); 

     final SecondFragment secondFragment = SecondFragment.newInstance("second"); 


     FragmentTransaction ft1 = getFragmentManager().beginTransaction(); 
     ft1.setCustomAnimations(R.anim.slideinwithhalfasecdelay, R.anim.slideout); 
     ft1.replace(R.id.frame, secondFragment); 
     ft1.commit(); 

但現在我想加我的第三個片段,

FirstFragment firstFragment1 = FirstFragment.newInstance("first"); 

     Log.d(TAG, "****Adding first fragment"); 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     FirstFragment firstFragment = FirstFragment.newInstance("one"); 
     ft.add(R.id.frame, firstFragment); 
     ft.addToBackStack("one"); 
     ft.commit(); 

     final SecondFragment secondFragment = SecondFragment.newInstance("second"); 


     FragmentTransaction ft1 = getFragmentManager().beginTransaction(); 
     ft1.setCustomAnimations(R.anim.slideinwithhalfasecdelay, R.anim.slideout); 
     ft1.replace(R.id.frame, secondFragment); 
     ft1.commit(); 

     ThirdFragment thirdFragment = ThirdFragment.newInstance("three"); 
     FragmentTransaction ft2 = getFragmentManager().beginTransaction(); 
     ft2.setCustomAnimations(R.anim.slideinwithasecdelay, R.anim.slideout); 
     ft2.replace(R.id.frame, thirdFragment); 
     ft2.commit(); 

現在,只有我的第三個片段滑過第一。我希望第二個片段在第一個和第三個片段上滑動,以便滑過第二個片段。

什麼是錯我在做我的代碼?

+0

您的帖子很熟悉。所以至少現在,你爲動畫添加了代碼,這很好。儘管我對動畫不太瞭解,但我會檢查你的代碼。 –

+0

請發佈slideinwithhalfasecdelay和滑出的佈局。我懷疑你正在使用objectAnimator。 –

回答

1

您必須只做一個更改。

請在替換片段之前設置自定義動畫。

ft1.setCustomAnimations(R.anim.slideinwithhalfasecdelay, R.anim.slideout); 

// and then 

ft1.replace(R.id.frame, secondFragment); 

不需要隱藏第一個片段。希望對你有效。

+0

是的,我正在使用ObjectAnimator。我嘗試做各種事情。嘗試ViewPager以及。幻燈片工作正常,但我需要重疊幻燈片行爲 – geetha

+0

Hasmukh我也試過。只顯示我的第二幀。沒有滑動工作。 – geetha

+0

您是否刪除了第一個片段的片段轉換?替換片段僅使用一個片段轉換。並請用新的代碼更新您的代碼,以便我們可以更好地瞭解這個問題。 –