通過JazzyViewPager來實現Fragment頁面間的動畫切效果,jazzyviewpager
JazzyViewPager 開源項目地址:
https://github.com/jfeinstein10/JazzyViewPager
其實實現它還是蠻簡單的,有兩個關鍵點,一是使用擴充FragmentPagerAdapter,二是重寫instantiateItem,isViewFromObject這兩個方法,如果僅僅擴充FragmentPagerAdapter的話,動畫效果則會不起作用。
布局檔案如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabPage" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.jfeinstein.jazzyviewpager.JazzyViewPager android:id="@+id/jazzy_pager" android:layout_width="match_parent" android:layout_weight="1" android:layout_height="0dp"> </com.jfeinstein.jazzyviewpager.JazzyViewPager> <TextView android:background="@color/bg_silver" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="this is the TabFragmentActivity\nTAB will be here." /></LinearLayout>
Java代碼如下:
package org.csware.ee.demo;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import com.jfeinstein.jazzyviewpager.JazzyViewPager;import org.csware.ee.demo.fragment.FourFragment;import org.csware.ee.demo.fragment.OneFragment;import org.csware.ee.demo.fragment.ThreeFragment;import org.csware.ee.demo.fragment.TwoFragment;public class TabFragmentActivity extends FragmentActivity { final static String TAG = "TabFragmentActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tab_fragment); init(); } private JazzyViewPager mJazzy; LinearLayout tabPage; FragmentActivity activity; void init() { activity = this; tabPage = (LinearLayout) findViewById(R.id.tabPage); setupJazziness(JazzyViewPager.TransitionEffect.Standard); } void setupJazziness(JazzyViewPager.TransitionEffect effect) { mJazzy = (JazzyViewPager) findViewById(R.id.jazzy_pager); mJazzy.setTransitionEffect(effect); //mJazzy.setAdapter(new MainAdapter()); mJazzy.setAdapter(new TabFragmentAdapter(getSupportFragmentManager())); //mJazzy.setPageMargin(30);// mJazzy.setOutlineEnabled(true); } /** * 適配器 */ class TabFragmentAdapter extends FragmentPagerAdapter { public TabFragmentAdapter(FragmentManager fragmentManager) { super(fragmentManager); } Fragment[] pages = new Fragment[]{ new OneFragment(), new TwoFragment(), new ThreeFragment(), new FourFragment() }; @Override public Fragment getItem(int position) { return pages[position]; } @Override public int getCount() { return pages.length; } //**************加上下面的兩行即可實現換頁時的動畫效果*********************************// @Override public Object instantiateItem(ViewGroup container, int position) { Object obj = super.instantiateItem(container, position); mJazzy.setObjectForPosition(obj, position); return obj; } @Override public boolean isViewFromObject(View view, Object object) { if (object != null) { return ((Fragment) object).getView() == view; } else { return false; } } }}
至於4個Fragment,就不貼了。