2014-03-06 112 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