Android下ViewPager的FragmentPagerAdapter 使用

自己的

package com.mad.trafficclient.adapter;
 
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
 
import java.util.ArrayList;
 
/**
 * 创建者:cc
 * 创建时间:2018/9/3 15:45
 * 修改时间:
 * 修改备注:
 * 描述:  ViewPager加载Fragment时候使用  viewPager的PagerAdapter适配器
 */
public class fg7_FragementAdapter extends FragmentPagerAdapter{
 
    private FragmentManager fragmentManager;
    private ArrayList<Fragment> list;
 
    public fg7_FragementAdapter(FragmentManager fm, ArrayList<Fragment> list) {
        super(fm);
        this.fragmentManager = fm;
        this.list = list;
 
    }
 
    @Override//返回要显示的碎片
    public Fragment getItem(int position) {
        return list.get(position);
    }
 
    @Override//返回要显示多少页
    public int getCount() {
        return list.size();
    }
}

调用:

public class fg7_GRZX extends FragmentHome {
 
    private TextView fg7_tv_personal;
    private TextView fg7_tv_CZjl;
    private TextView fg7_tv_etc_set;
    private ViewPager fg7_viewpager;
    private ArrayList<Fragment> fragmentslist;
    private fg7_FragementAdapter adapter;
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 
        View view = inflater.inflate(R.layout.fg7__grzx, container, false);
 
        return view;
    }
 
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
 
        initView();//找到控件
 
    }
 
    private void initView() {
        fg7_tv_personal = (TextView) getActivity().findViewById(R.id.fg7_tv_personal);
        fg7_tv_CZjl = (TextView) getActivity().findViewById(R.id.fg7_tv_CZjl);
        fg7_tv_etc_set = (TextView) getActivity().findViewById(R.id.fg7_tv_etc_set);
        fg7_viewpager = (ViewPager) getActivity().findViewById(R.id.fg7_viewpager1);
 
 
        fragmentslist = new ArrayList<>();
        initData();
 
    }
 
 
    private void initData() {
 
        //添加Fragment对象添加到Fragment集合中
        PerInfoFragment perInfoFragment = new PerInfoFragment();
        fragmentslist.add(perInfoFragment);
        CZjlFragment cZjlFragment = new CZjlFragment();
        fragmentslist.add(cZjlFragment);
        Etcset_Fragment etcset_fragment = new Etcset_Fragment();
        fragmentslist.add(etcset_fragment);
 
        adapter = new fg7_FragementAdapter(getChildFragmentManager(), fragmentslist);
        fg7_viewpager.setAdapter(adapter);
 
        fg7_viewpager.setCurrentItem(0);
        //当页面发生改变的时候
        fg7_viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
 
            }
 
            @Override
            public void onPageSelected(int position) {
 
            }
 
            @Override
            public void onPageScrollStateChanged(int state) {
 
            }
        });
 
        //点击Text改变page
        fg7_tv_personal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                fg7_viewpager.setCurrentItem(0);
            }
        });
 
        fg7_tv_CZjl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                fg7_viewpager.setCurrentItem(1);
            }
        });
 
        fg7_tv_etc_set.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                fg7_viewpager.setCurrentItem(2);
            }
        });
 
    }
 
 
}

网上找的一些

新建一个android项目

先展示效果吧

 

首先看myfragmentPagerAdater这个类的代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

package com.example.viewpager;

 

import java.util.List;

 

import android.support.v4.app.Fragment;   //注意打包是用support.v4的

import android.support.v4.app.FragmentManager;

import android.support.v4.app.FragmentPagerAdapter;

<br>//继承

public class myFragmentPagerAdapter extends FragmentPagerAdapter {

     

    private FragmentManager fragmetnmanager;  //创建FragmentManager

    private List<Fragment> listfragment; //创建一个List<Fragment>

<br>      //定义构造带两个参数

    public myFragmentPagerAdapter(FragmentManager fm,List<Fragment> list) {

        super(fm);

        this.fragmetnmanager=fm;

        this.listfragment=list;

    }

 

    @Override

    public Fragment getItem(int arg0) {

        // TODO Auto-generated method stub

        return listfragment.get(arg0); //返回第几个fragment

    }

 

    @Override

    public int getCount() {

        // TODO Auto-generated method stub

        return listfragment.size(); //总共有多少个fragment

    }

 

     

}

然后到MainActivity初始化ViewPager  (这里还没有图片偏移和链接点击事件的代码 后面讲到)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

/*

 * 初始化Viewpager<br>     *

*/

viewpager=(ViewPager) findViewById(R.id.vp); //获取ViewPager

listfragment=new ArrayList<Fragment>(); //new一个List<Fragment>

Fragment f1 = new fragment01();

Fragment f2 = new fragment02();

Fragment f3 = new fragment03();<br>     //添加三个fragment到集合

listfragment.add(f1);

listfragment.add(f2);

listfragment.add(f3);

 

FragmentManager fm=getSupportFragmentManager();

myFragmentPagerAdapter mfpa=new myFragmentPagerAdapter(fm, listfragment); //new myFragmentPagerAdater记得带上两个参数

 

viewpager.setAdapter(mfpa);

viewpager.setCurrentItem(0); //设置当前页是第一页

  现在到MainActivity中的三个链接的点击代码(这三个是TextView来着)之后就可以点击实现页面调转,但是图片偏移还没实现

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

/*

 * 初始化链接

 */

t1=(TextView) findViewById(R.id.textView1);

t2=(TextView) findViewById(R.id.textView2);

t3=(TextView) findViewById(R.id.textView3);

 

t1.setOnClickListener(new OnClickListener() {

     

    @Override

    public void onClick(View v) {

        viewpager.setCurrentItem(0);

         

    }

});

 

t2.setOnClickListener(new OnClickListener() {

     

    @Override

    public void onClick(View v) {

         

        viewpager.setCurrentItem(1);

    }

});

t3.setOnClickListener(new OnClickListener() {

     

    @Override

    public void onClick(View v) {

         

        viewpager.setCurrentItem(2);

    }

});

然后是图片偏移

1

2

3

private int index; //当前页卡;

private int imgleth; //图片宽度

private int offset; //偏移量

  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

  /*

   * 初始化图片

  */

  iv=(ImageView) findViewById(R.id.imageView1);

  //获取图片宽度

  imgleth=BitmapFactory.decodeResource(getResources(), R.drawable.a1).getWidth();

  //获取屏幕宽度

  DisplayMetrics dm=new DisplayMetrics();

  // 把屏幕尺寸信息赋值给DisplayMetrics dm,注意不是set

  getWindowManager().getDefaultDisplay().getMetrics(dm);

  // 屏幕宽度

  int count=dm.widthPixels;

  //计算偏移量

  offset=(count/3-imgleth)/2;

 

  

  //平移动画(第一页的)

Animation  an=new TranslateAnimation(0, offset, 0, 0);

  an.setFillAfter(true);

  an.setDuration(200);

  iv.setAnimation(an);

 最后是偏移图片跟着页面走 只需要在之前的 viewpager.setCurrentItem(0);后面添加即可

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

viewpager.setOnPageChangeListener(new OnPageChangeListener() {

     

    int one=offset*2+imgleth;//相邻页面的偏移量

    @Override

    public void onPageSelected(int arg0) {

         

        //评议动画

        Animation anima=new TranslateAnimation(index*one+offset,arg0*one+offset,0,0);

        index=arg0; //当前页跟着变

        anima.setFillAfter(true); // 动画终止时停留在最后一帧,不然会回到没有执行前的状态

        anima.setDuration(200);// 动画持续时间0.2秒

        iv.startAnimation(anima);// 是用ImageView来显示动画的

        Toast.makeText(MainActivity.this, "您选择了第"+(index+1)+"个页卡", 100).show(); 

    }

     

    @Override

    public void onPageScrolled(int arg0, float arg1, int arg2) {

        // TODO Auto-generated method stub

         

    }

     

    @Override

    public void onPageScrollStateChanged(int arg0) {

        // TODO Auto-generated method stub

         

    }

});

  

特别注意打包时候是打v4包(每个fragment也是打v4包)

1

2

3

4

5

import android.support.v4.app.Fragment;

import android.support.v4.app.FragmentActivity;

import android.support.v4.app.FragmentManager;

import android.support.v4.view.ViewPager;

import android.support.v4.view.ViewPager.OnPageChangeListener;

  

TranslateAnimation参数说明: 

float fromXDelta:这个参数表示动画开始的点离当前View X坐标上的差值;

float toXDelta, 这个参数表示动画结束的点离当前View X坐标上的差值;

float fromYDelta, 这个参数表示动画开始的点离当前View Y坐标上的差值;

float toYDelta, 这个参数表示动画开始的点离当前View Y坐标上的差值;

这4个参数确定移动的起点和终点

--------------------- 本文来自 超超CccC 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_20553007/article/details/82465448?utm_source=copy

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值