ViewPager解析
来源:互联网 发布:galgame汉化软件 编辑:程序博客网 时间:2024/06/05 06:47
ViewPager的使用
一、ViewPager简介:
android.support.v4.view.ViewPager中的一个常用的控件。允许数据页从左到右或者从右到左翻页,因此这种交互也备受设计师的青睐。在APP中的很多场景都用得到,比如第一次安装APP时的用户引导页、图片浏览时左右翻页、广告Banner页等等都会用到ViewPager。
二、ViewPager显示的对象
ViewPager显示的对象是View及其子类,自然包括各种布局及ImageView对象等。
LayoutInflater inflater=getLayoutInflater(); view = inflater.inflate(R.layout.pager1, null);ImageView image=new ImageView(this);image.setImageResource(imageIds[i]);
ViewPager可以显示Activity,首先将Activity转换成View对象:
LocalActivityManager lam = new LocalActivityManager(this, true);lam.dispatchCreate(savedInstanceState);//必须被调用Intent intent = new Intent(this, MainActivity.class); View mainView = lam.startActivity("MainActivity", intent).getDecorView();
ViewPager可以显示Fragment,会用到FragmentPagerAdapter,其实FragmentPagerAdapter就是PagerAdapter的子类。
List<Fragment> fragments=new ArrayList<>(); fragments.add(new BlankFragment()); fragments.add(new PlusOneFragment()); fragments.add(new ItemFragment()); FragAdapter adapter=new FragAdapter(getSupportFragmentManager(),fragments); ViewPager viewPager= (ViewPager) findViewById(R.id.viewpager); viewPager.setAdapter(adapter);
三、XML布局中添加
1.使用系统自带的标题栏的ViewPager
下面先介绍一下系统自带的两种标题栏:
ViewPager用来实现标题栏的两个子控件
- android.support.v4.view.PagerTitleStrip
- android.support.v4.view.PagerTabStrip
注:PagerTabStrip是继承PagerTitleStrip实现的
共同点:
- 都实现了标题栏的效果
- 通过android:layout_gravity 属性设置为TOP或BOTTOM来将它显示在ViewPager的顶部或底部
- 标题的获取,是重写适配器的getPageTitle(int)函数来获取的
不同点:
- PagerTitleStrip无下划线,PagerTabStrip有下划线
- PagerTitleStrip无交互,PagerTabStrip有交互,点击标题可实现页面跳转
添加使用:
<android.support.v4.view.ViewPager android:id="@+id/vp_main" android:layout_width="match_parent" android:layout_height="200dp" android:layout_gravity="center"> <!--PagerTitleStrip和PagerTabStrip只能存在一个,否则会影响效果--> <!--<android.support.v4.view.PagerTitleStrip--> <!--android:layout_width="match_parent"--> <!--android:layout_height="wrap_content"--> <!--android:layout_gravity="top"/>--> <android.support.v4.view.PagerTabStrip android:id="@+id/pager_tab_strip" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top"/></android.support.v4.view.ViewPager>
PagerTabStrip的相关属性设置
PagerTabStrip tabStrip = (PagerTabStrip) findViewById(R.id.pager_tab_strip);tabStrip.setTabIndicatorColorResource(R.color.colorAccent);//设置PagerTabStrip下标颜色tabStrip.setBackgroundResource(android.R.color.darker_gray);//设置PagerTabStrip背景色...
效果:
ViewPager的最上方是PagerTabStrip,下方是自定义的标题栏
建议:则两种标题栏实现的效果不是很好,一般不推荐使用。主流是使用自定义的标题栏,下面会见到。
2.带有自定义的标题栏的ViewPager
<android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="200dp" /><--下面是一个自定义的标题栏--><LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#33000000" android:layout_alignBottom="@id/view_pager" android:orientation="vertical"> <TextView android:id="@+id/tv_main" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="18sp" android:maxLines="1" android:layout_marginTop="2dp" android:textColor="@color/write"/> <LinearLayout android:id="@+id/ll_point_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_margin="5dp" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:layout_gravity="center_horizontal"> </LinearLayout></LinearLayout>
效果:
四、在Activity或Fragment中
ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);MyPagerAdapter adapter = new MyPagerAdapter(this, imageList);viewPager.setAdapter(adapter);//使当前显示的object位于中间,无论前后滑动都会“无尽”viewPager.setCurrentItem(Integer.MAX_VALUE / 2 - (Integer.MAX_VALUE / 2 % imageList.size()));//viewPager.setOnPageChangeListener方法已过时viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { /** * 页面正在滑动时调用 * @param position * @param positionOffset * @param positionOffsetPixels */ @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } /** * 页面切换后调用 * @param position 新页面位置 */ @Override public void onPageSelected(int position) { position = position % imageList.size(); //设置文字描述 tvImgDesc.setText(imageDescriptions[position]); //设置指示点改变当前点enable设为true,上一个设为false pointGroup.getChildAt(position).setEnabled(true); pointGroup.getChildAt(lastPointPosition).setEnabled(false); lastPointPosition = position; } /** * 当页面状态发生变化时调用 * @param state */ @Override public void onPageScrollStateChanged(int state) { }});
五、ViewPager的适配器PagerAdapter
PageAdapter必须重写的四个函数:
//ViewPager要显示的view数目int getCount() //判断view和object的对应关系boolean isViewFromObject(View arg0, Object arg1)//将当前视图添加到container中,并获取当前位置的viewObject instantiateItem(ViewGroup container, int position)//从当前container中销毁对应位置的objectvoid destroyItem(ViewGroup container, int position,Object object)
自定义的实现无限循环的PagerAdapter
public class MyPagerAdapter extends PagerAdapter { private Context mContent; private List<ImageView> mViewData; public MyPagerAdapter(Context content, List<ImageView> views) { mContent = content; mViewData=views; } @Override public int getCount() { return Integer.MAX_VALUE; } /** * 判断view和object的对应关系 * @param view * @param object * @return */ @Override public boolean isViewFromObject(View view, Object object) { return view==object; } /** * 获取相应位置的view * @param container view的容器,viewPager本身 * @param position 相应位置 * @return */ @Override public Object instantiateItem(ViewGroup container, int position) { //循环播放图片 container.addView(mViewData.get(position%mViewData.size())); return mViewData.get(position%mViewData.size()); } /** * 销毁对应位置的object * @param container view的容器,viewPager本身 * @param position 在container中的位置 * @param object */ @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); object=null; } /** * PagerTabStrip,PagerTitleStrip获取内容的方法 * @param position * @return */ @Override public CharSequence getPageTitle(int position) { return mTitles[position%mView.size()]; }}
阅读全文
1 0
- ViewPager解析
- ViewPager源码解析
- ViewPager全面解析
- ViewPager用法详细解析
- Android ViewPager用法解析
- Viewpager加ListView解析
- ViewPager之setOffscreenPageLimit()解析
- ViewPager源码解析之ViewPager如何呈现
- 解析ViewPager(二)——ViewPager源码解析
- ViewPager,Bundle,类的解析
- ViewPager与PagerAdapter深度解析
- ViewPager与PagerAdapter深度解析
- ViewPager的PagerAdapter的四个方法解析
- Android Viewpager动态删除Fragment解析
- Android Viewpager动态删除Fragment解析
- Viewpager+fragment数据更新问题解析
- Viewpager+fragment数据更新问题解析
- ViewPager中监听事件的解析
- JavaScript之策略模式
- 刘汝佳《算法竞赛入门经典(第二版)》习题(八)
- oracle 序列问题
- struts2的字段校验类型和struts2实现文件上传
- 【JavaScript的赋值操作符】
- ViewPager解析
- git学习心得1---充分掌握fetch,merge,push
- python_sutdy_note1-1
- 我的linux学习之路---第一篇
- 泛型解读
- bzoj P4027 [HEOI2015]兔子与樱花
- maven工程中找不到子模块spring配置文件的解决办法
- python_study_note1-2
- 简单图论(Dijkstra模板) HDU1874:畅通工程