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 |
com.example.viewpager;
|
然後到MainActivity初始化ViewPager (這裡還沒有圖片偏移和連結點選事件的程式碼 後面講到)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
現在到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 |
|
然後是圖片偏移
1 2 3 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
最後是偏移圖片跟著頁面走 只需要在之前的 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 |
|
特別注意打包時候是打v4包(每個fragment也是打v4包)
1 2 3 4 5 |
|
TranslateAnimation引數說明:
float fromXDelta:這個引數表示動畫開始的點離當前View X座標上的差值;
float toXDelta, 這個引數表示動畫結束的點離當前View X座標上的差值;
float fromYDelta, 這個引數表示動畫開始的點離當前View Y座標上的差值;
float toYDelta, 這個引數表示動畫開始的點離當前View Y座標上的差值;
這4個引數確定移動的起點和終點