2014-03-06 66 views
0

我想在碎片上做某種過渡,並且我在eclipse中使用默認的應用程序骨架來創建FragmentActivity。我注意到其他文章用於從xml指定自定義過渡動畫,但它是在Transaction上完成的,沒有使用FragmentActivity。 (這是btw更容易。)FragmentActivity自定義片段轉換

我想知道如何在FragmentActivity中進行自定義轉換。 在此先感謝!

編輯:類似this,但爲FragmentActivity。

MusicPlayerActivity.java

public class MusicPlayerActivity extends FragmentActivity { 

SectionsPagerAdapter mSectionsPagerAdapter; 

ViewPager mViewPager; 

    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // init pager and set its adapter 
    mSectionsPagerAdapter = new SectionsPagerAdapter(
      getSupportFragmentManager()); 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    //other init code ... 
} 

    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
     case 0: 
      return new MainFragment(); 
     case 1: 
      return new AllSongsFragment(); 
     case 2: 
      return new SettingsFragment(); 
     default: 
      return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     // Show 3 total pages. 
     return 3; 
    } 

    /** 
    * Get title for supplied Fragment number. 
    */ 
    @Override 
    public CharSequence getPageTitle(int position) { 
     Locale l = Locale.getDefault(); 
     switch (position) { 
     case 0: 
      return getString(R.string.title_section1).toUpperCase(l); 
     case 1: 
      return getString(R.string.title_section2).toUpperCase(l); 
     case 2: 
      return getString(R.string.title_section3).toUpperCase(l); 
     } 
     return null; 
    } 
} 

    //other methods 

} 

activity_music_player.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MusicPlayerActivity$OptionsFragment" > 

<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MusicPlayerActivity" > 

    <android.support.v4.view.PagerTitleStrip 
     android:id="@+id/pager_title_strip" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" 
     android:background="#33b5e5" 
     android:paddingBottom="4dp" 
     android:paddingTop="4dp" 
     android:textColor="#fff" /> 
</android.support.v4.view.ViewPager> 

<ListView 
    android:id="@+id/drawer" 
    android:layout_width="160dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="#333333" 
    android:choiceMode="singleChoice" /> 

+0

如果你正在'片段之間轉換',但沒有在事件上使用片段事務,這讓我假定你正在使用'ViewPager'和'FragmentAdapter' ?你可以發佈一些代碼+佈局 –

+0

好吧,我會,我使用ViewPager btw。 – Dejan

回答

1

正如您在評論中所說的,您正在使用ViewPager。這與在FragmentTransaction上執行動畫稍有不同。

你想要使用的是一個ViewPager.PageTransformer。有一些關於如何做的細節here

+0

多數民衆贊成它,謝謝。 – Dejan

0

問題是沒有太大的清晰。但我相信這可能會達到你的目的。

來自:http://developer.android.com/reference/android/app/Activity.html#overridePendingTransition(int,INT)

公共無效overridePendingTransition(INT enterAnim,詮釋exitAnim)

在API級別5 調用startActivity(意向)或完成的口味之一(後)指定明確的過渡動畫來執行下一步。

從JELLY_BEAN開始,使用這種方法的另一種方法是通過ActivityOptions包提供所需的動畫信息{@link #startActivity(Intent,Bundle)或相關函數。這允許您指定自定義動畫,即使從當前頂級活動的上下文之外開始活動也是如此。

參數 enterAnim用於傳入活動的動畫資源的資源ID。沒有動畫使用0。 exitAnim用於傳出活動的動畫資源的資源ID。沒有動畫使用0。

+0

是的,這是所有其他職位說,並明確不是我想要的。我在FragmentActivity裏面有3個片段,我想改變它們之間的轉換。我沒有代碼中的任何事務,一切都由FragmentActivity管理。我想在啓動和完成活動時動畫化片段之間的轉換而不是動畫。 – Dejan