Android笔记之ViewPager实现滑动页面
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实现滑动页面相关推荐
- Android WebView与ViewPager的滑动冲突分析
前言 如题所述,我使用的架构是ViewPager+Fragment+WebView进行开发的,由于WebView的html页面代码是第三方的,这里不好放出来,所以只能放一个大致的架构图,如图所示,Vi ...
- android 禁止Viewpager左右滑动功能
今天,简单讲讲Android如何禁止Viewpager左右滑动功能. 原理: 百度后发现重写ViewPager,覆盖ViewPager的onInterceptTouchEvent(MotionEven ...
- Android开发之ViewPager滑动页面效果实现(源代码分享)
我们先来谷歌官方文档对viewpager的介绍,该类允许用户通过页面翻转左右的数据,需要通过实现PagerAdapter适配器来生成视图显示的页面.因为注意这个类是早期设计和开发的,API可能会改变, ...
- android viewpager fragment传值,Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题...
前言 之前在做一个Viewpager上面加载多个Fragment时总会实例化已经创建好的Fragmnet对象类似 viewPager.setAdapter(new FragmentPagerAdapt ...
- android 应用切换滑动,Android应用中利用ViewPager实现多页面滑动切换效果示例
1.添加android support包因为上面的几个类都是在android support包中才提供,我们先添加包. 在Eclipse->Window->Android SDK Mana ...
- Android滑动页面 底部小圆点,Android ViewPager无限循环实现底部小圆点动态滑动
页面拖动到最后一页 再向下滑动回复到 第一页,第一页向前滑动回到 最后一页 同时,底部红色小圆点随着页面的滑动距离比例随时改变位置 布局: xmlns:android="http://sch ...
- TabHost+ViewPager+Fragment实现页面的滑动,android开发工具deve
<android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width=&qu ...
- Android利用ViewPager实现滑动广告板
•android-support-v4.jar,这是谷歌官方给我们提供的一个兼容低版本Android设备的软件包,里面包囊了只有在Android3.0以上可以使用的api.而ViewPager就是其中 ...
- Android viewPager2 + fragment 模拟微信首页2(滑动页面标签同步变化,点击标签滑动页面)
可以实现的方式:BottomNavigationView 这里我们不使用BottomNavigationView,手动来写代码 先看一下效果 fragment + viewPager2模拟微信首页2( ...
最新文章
- IE6动态插入option
- 软件测试(一):概念篇
- c++ 字符类型总结区别wchar_t,char,WCHAR(转)
- mysql 未能启用约束_未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。...
- CSS清楚浮动大全,工8种方法
- tty_operations
- otdr进行多种测试鸿蒙包括,华为联合南非MTN完成业界首个FTTH内置OTDR规模商用
- ProcessOn使用
- Python开发中有可能遇到的套接字重复使用错误
- ModChip and more
- Android 实现 欢迎界面 自动跳转 到 主界面
- HDU3032 Nim or not Nim?
- freemaker word转html,ftl文件-word文档转化成ftl文件
- 电子专业必懂的焊接知识与技能!
- 阿里云服务器使用命令行上发送邮件
- python泰坦尼克号数据分析_Python实战—泰坦尼克号生还者数据分析
- benj™ 100+城市街拍电影人像调色LR预设/移动LR预设/LUT预设效果预览
- 如何在linux下配置网络桥接?-使初学者轻松远离ping不通的烦恼
- JQ笔记3-样式操作
- 我需要30部美或英剧的剧名
热门文章
- PHP安装包解压失败,php安装失败,说什么解压失败什么的
- 多生产者_多线程必考的「生产者 - 消费者」模型,看齐姐这篇文章就够了
- JAVA基础中容易踩坑的知识点
- 深度剖析冒泡排序机制
- 048_CSS3用户界面
- mysql 中存储引擎是什么意思_mysql常用的存储引擎是什么
- java css_JavaWeb中基本的CSS的使用
- matlab 通过矩阵变换使图像旋转平移_数字图像处理|P11 第三章 第四节 图像的几何变换...
- linux crontab 每5分钟执行一次_Linux系统配置及服务管理_第10章_计划任务
- Android Studio系列教程一:下载与安装