• 通过JazzyViewPager来实现Fragment页面间的动画切效果


    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
    TAB 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,就不贴了。

  • 相关阅读:
    RDIFramework.NET开发实例━表约束条件权限的使用-WinForm
    RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm)
    RDIFramework.NET ━ Web中打印的各种方案参考-欢迎补充
    RDIFramework.NET 框架兼容各种数据库类型事务使用范例参考
    【干货】再上数据分页控件 ━ 更加灵活,更加实用-提供源码
    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-Web部分
    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-WinForm部分
    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布
    Javascript中的apply与call详解
    Javascript定义类(class)的三种方法
  • 原文地址:https://www.cnblogs.com/atwind/p/4602592.html
Copyright © 2020-2023  润新知