• Android技术——切换视图(两)随着ViewPage达到Tab幻灯片浏览




    Android技术——切换视图(一)~(四)在资源项目:https://github.com/YongYuIT/MeiNv_Liulanqi


    一、早期android(android.support.v4)提供了一系列支持Fragment滑动切换的类。主要是:

    1、ViewPager:它时Fragment容器,能够同一时候管理多个Fragment,并同意多个Fragment切换时提供动画效果。

    2、FragmentPagerAdapter:Adapter类。用于为ViewPager提供多个Fragment。此类通常须要扩展。

    3、PagerTitleStrip:与ViewPager结合使用,用于在ViewPager上显示“导航条”。

    二、借助ViewPage实现Tab滑动导航的过程例如以下:

    step1:扩展得到自己的FragmentPagerAdapter

    step2:扩展得到自己的SimpleOnPageChangeListener。这个主要时在ViewPager滑动选择时候被触发。因此在这里面一般是放置切换Fragment的代码。

    step3:向ViewPager加入自己的FragmentPagerAdapter和自己的SimpleOnPageChangeListener。

    示比例如以下:

    (本项目是在上文“Android技术——滑动切换(一)实现Tab导航”项目基础上加入而来)

    /MeiNv_Liulanqi/src/com/example/meinv_liulanqi/MeiNvFragment_V4.java文件(事实上这个类和上文中的MeiNvFragment的内容一模一样。仅仅是MeiNvFragment_V4是继承自android.support.v4.app.Fragment而已)

    package com.example.tab_nav;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    public class MeiNvFragment_V4 extends Fragment
    {
        public static int[]  img_ids;
        public static String Fragment_Key = "Fragment_Key";
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState)
        {
            View v = inflater.inflate(R.layout.fragment_layout, null);
            ImageView img_meinv = (ImageView) v.findViewById(R.id.img_meinv);
            // 获取创建该Fragment时传入的參数Bundle
            Bundle args = getArguments();
            img_meinv.setImageResource(img_ids[args.getInt(Fragment_Key)]);
            return v;
        }
    }

    /MeiNv_Liulanqi/src/com/example/meinv_liulanqi/ViewPagerActivity.java文件:

    package com.example.tab_nav;
    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.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.SimpleOnPageChangeListener;
    public class ViewPagerActivity extends FragmentActivity
    // 因为FragmentPagerAdapter仅仅在android.support.v4中定义
    // 而android.support.v4.app.FragmentActivity的实例化须要传入android.support.v4.app.FragmentManager。
    // 这个特殊的FragmentManager仅仅能通过FragmentActivity的getSupportFragmentManager方法得到,
    // 所以ViewPagerActivity必须继承android.support.v4.app.FragmentActivity
    {
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_view_pager);
            MeiNvFragment_V4.img_ids = new int[] { R.drawable.linzhiling,
                    R.drawable.liuyan, R.drawable.yangmi };
            ViewPager pager = (ViewPager) findViewById(R.id.pager);
            // 为ViewPager加入FragmentPagerAdapter
            myFragmentPagerAdapter adapter = new myFragmentPagerAdapter(
                    getSupportFragmentManager());
            pager.setAdapter(adapter);
            // 为ViewPager加入事件监听器
            mySimpleOnPageChangeListener listener = new mySimpleOnPageChangeListener(
                    pager);
            pager.setOnPageChangeListener(listener);
        }
        // 扩展得到自己的FragmentPagerAdapter
        class myFragmentPagerAdapter extends FragmentPagerAdapter
        {
            public myFragmentPagerAdapter(FragmentManager fm)
            {
                super(fm);
                // TODO Auto-generated constructor stub
            }
            // 获取指定位置的Fragment
            @Override
            public Fragment getItem(int arg0)
            {
                Fragment f = new MeiNvFragment_V4();
                Bundle b = new Bundle();
                b.putInt(MeiNvFragment.Fragment_Key, arg0);
                f.setArguments(b);
                return f;
            }
            // 指出该Adapter包括Fragment的数目
            @Override
            public int getCount()
            {
                // TODO Auto-generated method stub
                return MeiNvFragment_V4.img_ids.length;
            }
            @Override
            public CharSequence getPageTitle(int position)
            {
                return "第" + (position + 1) + "个美女";
            }
        }
        // 扩展得到自己的SimpleOnPageChangeListener
        class mySimpleOnPageChangeListener extends SimpleOnPageChangeListener
        {
            private ViewPager pager;
            public mySimpleOnPageChangeListener(ViewPager p)
            {
                pager = p;
            }
            public void onPageSelected(int position)
            {
                pager.setCurrentItem(position);
            }
        }
    }
    /MeiNv_Liulanqi/res/layout/activity_view_pager.xml文件:

    <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" >
        <android.support.v4.view.PagerTitleStrip
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top" >
        </android.support.v4.view.PagerTitleStrip>
    </android.support.v4.view.ViewPager>
    启动ViewPagerActivity 后的效果:


    正在从第一个美女向第二个美女滑动中。


    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4850085.html
Copyright © 2020-2023  润新知