2014-10-20 39 views
2

我有一個fragment,我希望它在添加時淡入,當它被刪除時淡入淡出。我這樣做是在目前的方法是如下:(雖然它不具有任何動畫效果)加載片段沒有淡入或淡出

淡入添加時:

FragmentManager manager =getFragmentManager(); 
manager.beginTransaction().setCustomAnimations(R.anim.fadein, R.anim.fadeout) 
       .add(R.id.loading_fragment_container, loadingFragment, "loadingFragment").commit(); 

淡出取出時:

manager.beginTransaction().setCustomAnimations(R.anim.fadeout, R.anim.fadein) 
      .remove(loadingFragment).commit(); 

fadein.xml

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"> 
    android:interpolator="@android:anim/linear_interpolator" 
    android:propertyName="alpha" 
    android:valueFrom="0.0" 
    android:valueTo="1" 
    android:duration="1500" 
</objectAnimator> 

fadeout.xml

<?xml version="1.0" encoding="utf-8"?> 

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"> 
    android:interpolator="@android:anim/linear_interpolator" 
    android:propertyName="alpha" 
    android:valueFrom="1" 
    android:valueTo="0.0" 
    android:duration="1500" 
</objectAnimator> 

我的片段類:

public class LoadingFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_loading_layout, container,false); 
    } 

    //I even tried to add this but still nothing happens 
    @Override 
    public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) { 
     return super.onCreateAnimator(android.R.anim.fade_in, true, android.R.anim.fade_out); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     //basically this code just makes the loading image (which is a circle) spinning on its center forever 
     //https://stackoverflow.com/questions/3137490/how-to-spin-an-android-icon-on-its-center-point 
     ImageView loadingCircle= (ImageView) getActivity().findViewById(R.id.loadingImage); 
     Log.d("loadingCircle","loadingCircle: "+loadingCircle); 
     RotateAnimation r = new RotateAnimation(0.0f, 10.0f * 360.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
     r.setDuration(10000); 
     r.setInterpolator(new LinearInterpolator()); 
     r.setRepeatCount(Animation.INFINITE); 
     r.setRepeatMode(Animation.INFINITE); 
     r.setFillEnabled(true); 
     r.setFillAfter(true); 
     loadingCircle.startAnimation(r); 
    } 
} 
+0

不想??這是英語嗎?請使用正確的拼寫。這非常煩人。 – BenjaminPaul 2014-10-20 08:41:05

回答

0

在片段覆蓋此

​​
+0

我試過你的解決方案,但onCreateAnimation永遠不會被調用。它由Android Studio變灰了。我也在我的問題中添加了我的片段類。 – 2014-10-20 08:07:38

+0

爲什麼你沒有在片段類 – 2014-10-20 08:10:53

+0

中放置@Override,並暫時評論你的onActivityCreated代碼 – 2014-10-20 08:12:15

1

嘗試這種情況:

manager.beginTransaction().setCustomAnimations(R.anim.fadein, R.anim.fadeout, R.anim.fadeout, R.anim.fadein) 
       .add(R.id.loading_fragment_container, loadingFragment, "loadingFragment").commit(); 

順便說一句:1.5秒是相當長的動畫週期

+0

嗯,我只需要1.5秒就能更清楚地看到動畫。順便說一下,你的解決方案需要API等級13,但我目前的最小API是11 – 2014-10-20 08:01:57

+0

如果這是一個選項,你可以嘗試支持片段管理器,因爲這種方法可行 – Carsten 2014-10-20 08:45:51

1

For Fadein FragmentManager manager = getFragmentManager(); manager.beginTransaction()。setCustomAnimations(android.R.animator.fade_in,android.R.animator.fade_out) .add(R.id.loading_fragment_container,loadingFragment,「loadingFragment」)。commit(); 。

對於淡出 manager.beginTransaction()setCustomAnimations(android.R.animator.fadeout,android.R.animator.fadein) 卸下襬臂(loadingFragment).commit();

+0

你實際上只是做了和我一樣的工作 – 2014-10-20 10:40:13