1、概述;

  • Viewpager的最大特点就是实现滑动的界面
  • 多个页面的内容可以有两种填充方式:View (普通Activity下),Fragment(V4的Fragmentctivity或者Fragment下)
  • ViewPager的布局最好是在LinearLayout下写

2、main.xml添加Viewpager组件:

<android.support.v4.view.ViewPagerandroid:id="@+id/Pager"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center" ></android.support.v4.view.ViewPager>

3、主要代码的步骤:

实例化Viewpager+获得ArrayList作为填充内容+setAdapter(ArrayList....)+新建类extends (FragmentState)PagerAdapter

+重写适配器的Constructor、getItem、getCount+根据情况决定是否监听onPageChangeListener

(1)Views作为填充内容:

private void initViewPager() {// TODO Auto-generated method stubpager = (ViewPager) findViewById(R.id.Pager);LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);ImageView imaV;for (int i = 0; i < ids.length; i++) {imaV = new ImageView(this);imaV.setImageResource(ids[i]);imaV.setLayoutParams(params);imaV.setScaleType(ScaleType.FIT_XY);views.add(imaV);}pager.setAdapter(new MyAdapter(views));}
public class MyAdapter extends PagerAdapter {private List<View> views;public MyAdapter(List<View> views) {this.views = views;}//destroyItem,getCount,instantiateItem实现循环滑动
    @Overridepublic void destroyItem(View arg0, int arg1, Object arg2) {((ViewPager) arg0).removeView(views.get(arg1 % views.size()));}@Overridepublic int getCount() {return views.size();//向右循环滑动//return views.size()*5;
    }@Overridepublic Object instantiateItem(View arg0, int arg1) {Log.e("tag", "instantiateItem = " + arg1);((ViewPager) arg0).addView(views.get(arg1 % views.size()), 0);return views.get(arg1 % views.size());}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == (arg1);}

}

(2)fragment作为填充内容:

  • FragmentActivity或Fragment下
  • fragment_1 extend Fragment
private ViewPager pager;
pager = (ViewPager) findViewById(R.id.Pager);fragmentList.add(new fragment_1());// fragment_1导入v4的包fragmentList.add(new fragment_1());fragmentList.add(new fragment_1());Log.i("size", fragmentList.size() + "");MyAdapter myadapter = new MyAdapter(getSupportFragmentManager(),fragmentList);pager.setAdapter(myadapter);
}
public class MyAdapter extends FragmentStatePagerAdapter {List<Fragment> fragmentList;// 构造函数public MyAdapter(FragmentManager fm, List<Fragment> fragmentList) {super(fm);// TODO Auto-generated constructor stubthis.fragmentList = fragmentList;}// 重要
        @Overridepublic Fragment getItem(int arg0) {// TODO Auto-generated method stubLog.i("getItem", arg0 + "");return (fragmentList == null || fragmentList.size() == 0) ? null: fragmentList.get(arg0);}// 重要
        @Overridepublic int getCount() {// TODO Auto-generated method stubreturn fragmentList == null ? 0 : fragmentList.size();}}
}

4、决定是否为ViewPager设置监听:每次切换页面的动作

 pager.setOnPageChangeListener(new OnPageChangeListener() {/*** onPageSelected:每次切换页面就会执行 在此实现圆点指示器以及在最后页面显示button*/@Overridepublic void onPageSelected(int arg0) {// TODO Auto-generated method stub}/*** 当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回得到调用。 其中三个参数的含义分别为:* * arg0 :当前页面,及你点击滑动的页面* * arg1:当前页面偏移的百分比* * arg2:当前页面偏移的像素位置*/@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stubif (arg0 == views.size() - 1) {Log.i("jump", "NextActivity");startActivity(new Intent().setClass(MainActivity.this,NextActivity.class));finish();Log.i("finished", "MainActivity");}}@Overridepublic void onPageScrollStateChanged(int arg0) {// TODO Auto-generated method stub
            }});

5、为ViewPager添加标题

一般情况下ViewPager在多个页面下都是需要标题来作为指示的

标题有两种形式:

(1)使用view.PagerTabStrip 来匹配各个页面:

main.xml部分:

<android.support.v4.view.ViewPagerandroid:id="@+id/viewPager"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center" ><android.support.v4.view.PagerTabStrip    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_gravity="top" /></android.support.v4.view.ViewPager>

代码部分:适配器需要添加private List<String> titleList作为标题字符串集合

class myPagerAdapter extends FragmentPagerAdapter {private List<Fragment> fragmentList;private List<String>   titleList;public myPagerAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> titleList){super(fm);this.fragmentList = fragmentList;//this.fragmentList为这个类下的变量,右边的fragmentList是构造函数的参数this.titleList = titleList;}.........
public CharSequence getPageTitle(int position) {return (titleList.size() > position) ? titleList.get(position) : "";}
 

(2)监听onPageChanggeListener改变Textiew或RadioGroup的状态:

  • Textiew,Radioroup的触碰效果通过selector实现
  • 按textView、RadioGroup改变页面,通过对其setOnClickListener实现
  • 页面滑动改变对应按钮的改变通过Viewpager的监听
  • 附加:图片指示器的实现只需在Viewpager监听实现

Done!

转载于:https://www.cnblogs.com/xingyyy/p/3337595.html

Android笔记之ViewPager实现滑动页面相关推荐

  1. Android WebView与ViewPager的滑动冲突分析

    前言 如题所述,我使用的架构是ViewPager+Fragment+WebView进行开发的,由于WebView的html页面代码是第三方的,这里不好放出来,所以只能放一个大致的架构图,如图所示,Vi ...

  2. android 禁止Viewpager左右滑动功能

    今天,简单讲讲Android如何禁止Viewpager左右滑动功能. 原理: 百度后发现重写ViewPager,覆盖ViewPager的onInterceptTouchEvent(MotionEven ...

  3. Android开发之ViewPager滑动页面效果实现(源代码分享)

    我们先来谷歌官方文档对viewpager的介绍,该类允许用户通过页面翻转左右的数据,需要通过实现PagerAdapter适配器来生成视图显示的页面.因为注意这个类是早期设计和开发的,API可能会改变, ...

  4. android viewpager fragment传值,Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题...

    前言 之前在做一个Viewpager上面加载多个Fragment时总会实例化已经创建好的Fragmnet对象类似 viewPager.setAdapter(new FragmentPagerAdapt ...

  5. android 应用切换滑动,Android应用中利用ViewPager实现多页面滑动切换效果示例

    1.添加android support包因为上面的几个类都是在android support包中才提供,我们先添加包. 在Eclipse->Window->Android SDK Mana ...

  6. Android滑动页面 底部小圆点,Android ViewPager无限循环实现底部小圆点动态滑动

    页面拖动到最后一页 再向下滑动回复到 第一页,第一页向前滑动回到 最后一页 同时,底部红色小圆点随着页面的滑动距离比例随时改变位置 布局: xmlns:android="http://sch ...

  7. TabHost+ViewPager+Fragment实现页面的滑动,android开发工具deve

    <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width=&qu ...

  8. Android利用ViewPager实现滑动广告板

    •android-support-v4.jar,这是谷歌官方给我们提供的一个兼容低版本Android设备的软件包,里面包囊了只有在Android3.0以上可以使用的api.而ViewPager就是其中 ...

  9. Android viewPager2 + fragment 模拟微信首页2(滑动页面标签同步变化,点击标签滑动页面)

    可以实现的方式:BottomNavigationView 这里我们不使用BottomNavigationView,手动来写代码 先看一下效果 fragment + viewPager2模拟微信首页2( ...

最新文章

  1. IE6动态插入option
  2. 软件测试(一):概念篇
  3. c++ 字符类型总结区别wchar_t,char,WCHAR(转)
  4. mysql 未能启用约束_未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。...
  5. CSS清楚浮动大全,工8种方法
  6. tty_operations
  7. otdr进行多种测试鸿蒙包括,华为联合南非MTN完成业界首个FTTH内置OTDR规模商用
  8. ProcessOn使用
  9. Python开发中有可能遇到的套接字重复使用错误
  10. ModChip and more
  11. Android 实现 欢迎界面 自动跳转 到 主界面
  12. HDU3032 Nim or not Nim?
  13. freemaker word转html,ftl文件-word文档转化成ftl文件
  14. 电子专业必懂的焊接知识与技能!
  15. 阿里云服务器使用命令行上发送邮件
  16. python泰坦尼克号数据分析_Python实战—泰坦尼克号生还者数据分析
  17. benj™ 100+城市街拍电影人像调色LR预设/移动LR预设/LUT预设效果预览
  18. 如何在linux下配置网络桥接?-使初学者轻松远离ping不通的烦恼
  19. JQ笔记3-样式操作
  20. 我需要30部美或英剧的剧名

热门文章

  1. PHP安装包解压失败,php安装失败,说什么解压失败什么的
  2. 多生产者_多线程必考的「生产者 - 消费者」模型,看齐姐这篇文章就够了
  3. JAVA基础中容易踩坑的知识点
  4. 深度剖析冒泡排序机制
  5. 048_CSS3用户界面
  6. mysql 中存储引擎是什么意思_mysql常用的存储引擎是什么
  7. java css_JavaWeb中基本的CSS的使用
  8. matlab 通过矩阵变换使图像旋转平移_数字图像处理|P11 第三章 第四节 图像的几何变换...
  9. linux crontab 每5分钟执行一次_Linux系统配置及服务管理_第10章_计划任务
  10. Android Studio系列教程一:下载与安装