我正在創建自動播放幻燈片放映動畫。其中,它不只是幻燈片放映,它是重疊的幻燈片放映。問題與片段幻燈片動畫
含義,我有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();
現在,只有我的第三個片段滑過第一。我希望第二個片段在第一個和第三個片段上滑動,以便滑過第二個片段。
什麼是錯我在做我的代碼?
您的帖子很熟悉。所以至少現在,你爲動畫添加了代碼,這很好。儘管我對動畫不太瞭解,但我會檢查你的代碼。 –
請發佈slideinwithhalfasecdelay和滑出的佈局。我懷疑你正在使用objectAnimator。 –