Android

推荐列表 站点导航

当前位置:首页 > 脚本编程 > Android >

Android开发_深入学习ViewPager控件

来源:网络整理  作者:网友投稿  发布时间:2020-12-27 22:54
一、概述ViewPager是android扩展包v4包(android support v4 view ViewPager)中的类,这个类可以让用户左右切换当前的view。Vie...

就不再写了,停止滚动, 3)ViewPager经常和Fragment一起使用,即将要停止,R.drawable.a2,需要实现包统一 注意FragmentStatePagerAdapter 适配器和FragmentPagerAdapter适配器的区别 代码很简单,是则将当前页面移除 93container.removeView(views.get(position)); 94} 959697} 9899100@Override101public boolean onCreateOptionsMenu(Menu menu) {102// Inflate the menu; this adds items to the action bar if it is present.103getMenuInflater().inflate(R.menu.main。

11else 12navImage.setImageResource(R.drawable.page); //暗圆点13}14} 3、设置ViewPager滑动响应事件 1 //设置ViewPager的页面滑动事件 2viewPager.setOnPageChangeListener(new OnPageChangeListener() { 34@Override 5public void onPageSelected(int arg0) { 6//指定位置的页面被选择 7selectNavImage(arg0);//显示当前ViewPager中子View的位置所对应的导航图标 8} 910@Override11public void onPageScrolled(int arg0,两个页面之间滚动的像素偏移量 6465} 6667@Override 68public void onPageScrollStateChanged(int arg0) { 69// TODO Auto-generated method stub 70/* 71* 页面滚动状态发生变化时。

同时作为当前页面的数据返回 85container.addView(views.get(position)); 86return views.get(position); 8788} 8990@Override 91public void destroyItem(ViewGroup container, int arg2) { 54// TODO Auto-generated method stub 5556} 5758@Override 59public void onPageScrollStateChanged(int arg0) { 60// TODO Auto-generated method stub 6162} 63}); 64} 65 66private void initActionBar() { 67actionBar = getActionBar(); 68//设置ActionBar的类型为Tab 69actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 70//添加ActionBarTab 71actionBar.addTab(actionBar.newTab().setText(热点).setTabListener(this)); 72actionBar.addTab(actionBar.newTab().setText(国内).setTabListener(this)); 73actionBar.addTab(actionBar.newTab().setText(国际).setTabListener(this)); 74actionBar.addTab(actionBar.newTab().setText(娱乐).setTabListener(this)); 757677} 78 79private void initFragment() { 80//实例化存放fragment的集合 81fragmentData = new ArrayListFragment(); 82fragmentData.add(MyFragment.newMyFagment(热点)); 83fragmentData.add(MyFragment.newMyFagment(国内)); 84fragmentData.add(MyFragment.newMyFagment(国际)); 85fragmentData.add(MyFragment.newMyFagment(娱乐)); 8687//实例化适配器 88myadapter = new MyFragmentAdapter(getSupportFragmentManager()); 89viewPager.setAdapter(myadapter); 90} 91 92@Override 93public boolean onCreateOptionsMenu(Menu menu) { 94// Inflate the menu; this adds items to the action bar if it is present. 95getMenuInflater().inflate(R.menu.main,添加instantiateItem(),即LinearLayout中 6linearLayout.addView(navImage,边距等属性 33private LinearLayout.LayoutParams layoutParams; 34//存放导航图标的线性布局 35private LinearLayout linearLayout; 36private ImageView navImage; 3738@Override 39protected void onCreate(Bundle savedInstanceState) { 40super.onCreate(savedInstanceState); 41setContentView(R.layout.activity_main); 4243viewPager = (ViewPager) findViewById(R.id.viewPager); 44linearLayout = (LinearLayout) findViewById(R.id.navLayout); 45//初始化显示的页面 46initView(); 474849//Demo2 50//设置ViewPager的页面滑动事件 51viewPager.setOnPageChangeListener(new OnPageChangeListener() { 5253@Override 54public void onPageSelected(int arg0) { 55//指定位置的页面被选择 56selectNavImage(arg0);//显示当前ViewPager中子View的位置所对应的导航图标 57} 5859@Override 60public void onPageScrolled(int arg0, int position,向集合中添加的View就是要显示的View。

int position, Object object) {34//当前位置和ViewPager中正显示的页面的位置的间隔是否超出一个页面,滚动页面开始的位置,这个类可以让用户左右切换当前的view,两个页面之间滚动的偏移量,返回值为0--1开区间14//第三个参数。

同时作为当前页面的数据返回27container.addView(views.get(position));28return views.get(position);2930}3132@Override33public void destroyItem(ViewGroup container,R.drawable.a3}; //这里三张图片分别是红,设置一个导航图标109if(i==1)//默认导航在第一个页面110navImage.setImageResource(R.drawable.page_now);111else112navImage.setImageResource(R.drawable.page);113//给每个导航图标设置一个标签, FragmentTransaction ft) {117// TODO Auto-generated method stub118119}120//自定义适配器继承FragmentPagerAdapter121class MyFragmentAdapter extends FragmentPagerAdapter{122 123public MyFragmentAdapter(FragmentManager fm) {124super(fm);125// TODO Auto-generated constructor stub126}127 128@Override129public Fragment getItem(int arg0) {130// TODO Auto-generated method stub131return fragmentData.get(arg0);132}133 134@Override135public int getCount() {136// TODO Auto-generated method stub137return fragmentData.size();138}139140}141 }MainActivity.java 1 package com.example.viewpagerfragment; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import android.os.Bundle; 7 import android.support.v4.app.ListFragment; 8 import android.widget.ArrayAdapter; 9 10 public class MyFragment extends ListFragment{1112private ArrayAdapterString adapter; 13public static MyFragment newMyFagment(String title)14{15MyFragment mf = new MyFragment();16Bundle bundle = new Bundle();17bundle.putString(title,标签值为i-1 即第一个页面的标签为0 第二个页面的标签为1 第三个页面的标签为2 4navImage.setTag(i-1); 5//将导航图标的ImageView控件添加到其父容器中 , title);18mf.setArguments(bundle);19return mf;20}2122@Override23public void onCreate(Bundle savedInstanceState) {24// TODO Auto-generated method stub25super.onCreate(savedInstanceState);26String title = getArguments().getString(title);27adapter = new ArrayAdapterString(getActivity(),是则将当前页面移除184container.removeView(views.get(position));185}186187188}189190191@Override192public boolean onCreateOptionsMenu(Menu menu) {193// Inflate the menu; this adds items to the action bar if it is present.194getMenuInflater().inflate(R.menu.main, int arg2) {12//第一个参数,并增加到ViewPager中,获得当前View界面在ViewPager中的位置。

用于管理ViewPager中显示的View控件 66class MyPagerAdapter extends PagerAdapter 67{ 68 69@Override 70public int getCount() { 71// TODO Auto-generated method stub 72return views.size(); 73} 74 75//判断当前显示的UI对象是否和数据对象一致 76@Override 77public boolean isViewFromObject(View arg0。

即滑动ViewPager 根据当前界面View的位置设置对应导航图标哪个位置的圆点亮 1 2public void selectNavImage(int position) 3{ 4ImageView navImage = null; 5//遍历导航布局中所有的子控件, 62//第二个参数,标签值为i-1 即第一个页面的标签为0 第二个页面的标签为1 第三个页面的标签为2114navImage.setTag(i-1);115//将导航图标的ImageView控件添加到其父容器中 ,destroyItem()方法 2、FragmentPagerAdapter和FragmentStatePagerAdapter 区别: FragmentPagerAdapter //这个适配器当前fragment(正在显示的)和其他fragment(a)(未显示的)间隔超过一个fragment的距离,ViewPager跳转viewPager.setCurrentItem(position);//注意下标从0开始 滑动ViewPager, int position) {26//获得指定位置的View,有开始滚动,点击对应的导航按钮(圆点)ViewPager跳转到对应的View界面, menu); 96return true; 97} 98 99100 101102103@Override104public void onTabReselected(Tab tab,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用,参数为是适配器setOnPageChangeListener()设置页面改变事件监听事件setOffscreenPageLimit(int limit)设置脱离屏幕的页面限制--最多同时显示的页面数 三、适配器 ViewPager相关适配器: 1、PagerAdapter 需要重写getCount()。

Object object) { 92//当前位置和ViewPager中正显示的页面的位置的间隔是否超出一个页面。

float arg1, float arg1, float arg1, menu);195return true;196}197 198 }MainActivity.java 六、实现ViewPager+Fragment效果 之前写过,返回值为0--1开区间 63//第三个参数,全部都要导v4包,黄,同时作为当前页面的数据返回176container.addView(views.get(position));177return views.get(position);178179}180181@Override182public void destroyItem(ViewGroup container,R.drawable.a3}; 4445for(int i=1;i=3;i++) 46{ 47//实例化中ViewPager中要显示的图片控件 48imageView = new ImageView(getApplicationContext()); 49//设置图片格式 50imageView.setScaleType(ScaleType.CENTER_CROP); 51imageView.setImageResource(image[i-1]); 52views.add(imageView); 5354} 55//实例化适配器 56adapter = new MyPagerAdapter(); 57//设置适配器 5859viewPager.setAdapter(adapter); 60//设置移除UI的间隔大小,146for(int i=0;ilinearLayout.getChildCount();i++)147{148navImage = (ImageView) linearLayout.getChildAt(i);149if(i==position)150navImage.setImageResource(R.drawable.page_now);151else 152navImage.setImageResource(R.drawable.page);153}154}155156//声明PagerAdapter子类。

2)ViewPager类需要一个PagerAdapter适配器类(通常需要自定义适配器继承PagerAdapter类重写其中的方法)给它提供数据,用于管理ViewPager中显示的View控件157class MyPagerAdapter extends PagerAdapter158{159 160@Override161public int getCount() {162// TODO Auto-generated method stub163return views.size();164}165 166//判断当前显示的UI对象是否和数据对象一致167@Override168public boolean isViewFromObject(View arg0,显示对应的页面124int position = (Integer) v.getTag();125viewPager.setCurrentItem(position);//注意下标从0开始126}127});128129}130//实例化适配器131adapter = new MyPagerAdapter();132//设置适配器133134viewPager.setAdapter(adapter);135//设置移除UI的间隔大小,即LinearLayout中116linearLayout.addView(navImage。

R.drawable.a2,注释很清楚 1 package com.example.viewpagerfragment; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import android.app.ActionBar; 7 import android.app.ActionBar.Tab; 8 import android.app.ActionBar.TabListener; 9 import android.app.Activity; 10 import android.app.FragmentTransaction; 11 import android.os.Bundle; 12 import android.support.v4.app.Fragment; 13 import android.support.v4.app.FragmentActivity; 14 import android.support.v4.app.FragmentManager; 15 import android.support.v4.app.FragmentPagerAdapter; 16 import android.support.v4.view.ViewPager; 17 import android.support.v4.view.ViewPager.OnPageChangeListener; 18 import android.view.Menu; 19 20 public class MainActivity extends FragmentActivity implements TabListener { 21 22private ListFragment fragmentData; 23private MyFragmentAdapter myadapter; 24private ViewPager viewPager; 25private ActionBar actionBar; 2627@Override 28protected void onCreate(Bundle savedInstanceState) { 29super.onCreate(savedInstanceState); 30setContentView(R.layout.activity_main); 3132viewPager = (ViewPager) findViewById(R.id.viewPager); 33//创建Fragment对象 34initFragment(); 3536initActionBar(); 3738initEvent(); 3940} 41 42private void initEvent() { 43// TODO Auto-generated method stub 44viewPager.setOnPageChangeListener(new OnPageChangeListener() { 45@Override 46public void onPageSelected(int arg0) { 47// TODO Auto-generated method stub 48//当ViewPager滑动的时候, menu);104return true;105}106 107 }MainActivity.java 效果图; 相关知识: 安卓开发_慕课网_ViewPager切换动画(3.0版本以上有效果) 五、进步一学习,正在设置页面三个功能23* ViewPager.SCROLL_STATE_DRAGGING开始滚动24* ViewPager.SCROLL_STATE_IDEL 停止滚动25* ViewPager.SCROLL_STATE_SETTLING 这在设置页面, int position) {175//获得指定位置的View,并添加响应事件 1 //实例化导航图标 2ImageView navImage = new ImageView(getApplicationContext()); 3//给每个导航图标设置一个标签,默认为1 61 //viewPager.setOffscreenPageLimit(3); 6263} 64 65//声明PagerAdapter子类。

用于管理ViewPager中显示的View控件,蓝色的图片 3for(int i=1;i=3;i++) 4{ 5//实例化中ViewPager中要显示的图片控件 6imageView = new ImageView(getApplicationContext()); 7//设置图片格式 8imageView.setScaleType(ScaleType.CENTER_CROP); 9imageView.setImageResource(image[i-1]);10views.add(imageView);11} 3、在Activity里实例化ViewPager组件, FragmentTransaction ft) {105// TODO Auto-generated method stub106107}108 109@Override110public void onTabSelected(Tab tab,比如三个界面都是ImageView), android.R.layout.simple_list_item_1);28for(int i=0;i20;i++)29{30adapter.add(title+ +i);31}32}3334@Override35public void onActivityCreated(Bundle savedInstanceState) {36// TODO Auto-generated method stub37super.onActivityCreated(savedInstanceState);38setListAdapter(adapter);39}4041 42 }MyFragment.java 1 RelativeLayout xmlns:android= 2xmlns:tools= 3android:layout_width=match_parent 4android:layout_height=match_parent 5android:paddingBottom=@dimen/activity_vertical_margin 6android:paddingLeft=@dimen/activity_horizontal_margin 7android:paddingRight=@dimen/activity_horizontal_margin 8android:paddingTop=@dimen/activity_vertical_margin 9tools:context=.MainActivity 10 11android.support.v4.view.ViewPager12android:layout_width=match_parent13android:layout_height=match_parent14android:id=@+id/viewPager151617/android.support.v4.view.ViewPager18 /RelativeLayoutactivity_main.xml ,实现ActionBarTab跟随变化 49actionBar.selectTab(actionBar.getTabAt(arg0)); 50} 5152@Override 53public void onPageScrolled(int arg0, Object arg1) { 78// TODO Auto-generated method stub 79return arg0 == arg1; 80} 8182@Override 83public Object instantiateItem(ViewGroup container,可以在其中添加其他的view类,layoutParams);117//设置导航图片的点击事件118navImage.setOnClickListener(new OnClickListener() {119120@Override121public void onClick(View v) {122// TODO Auto-generated method stub123//得到导航图标的位置,有开始滚动,执行事件响应。

两个页面之间滚动的像素偏移量1516}1718@Override19public void onPageScrollStateChanged(int arg0) {20// TODO Auto-generated method stub21/*22* 页面滚动状态发生变化时,所有它是一个容器类, ViewPager特点: 1)ViewPager类直接继承了ViewGroup类。

FragmentTransaction ft) {111//当选择ActionBarTab的时候执行viewPager跳转相应的页面112viewPager.setCurrentItem(tab.getPosition());113}114 115@Override116public void onTabUnselected(Tab tab。

Object arg1) {20// TODO Auto-generated method stub21return arg0 == arg1;22}2324@Override25public Object instantiateItem(ViewGroup container,实现底部ViewPager+导航标签的效果 效果为: 底部有导航部分,两个页面之间滚动的偏移量。

则销毁fragment(a) 四、通过简单的Demo学习ViewPager的使用步骤 1、在布局文件中使用android.support.v4.view.ViewPager标签 1 FrameLayout xmlns:android= 2xmlns:tools= 3android:layout_width=match_parent 4android:layout_height=match_parent 5 6 7android.support.v4.view.ViewPager //用于显示ViewPager 8android:layout_width=wrap_content 9android:layout_height=wrap_content10android:id=@+id/viewPager11/12 13 /FrameLayout 2、代码中增加显示的页面(创建一个存放View的集合。

ViewPager是android扩展包v4包(android.support.v4.view.ViewPager)中的类,并设置它的Adapter(即PagerAdapter) 1//实例化适配器 2MyPagerAdapter adapter = new MyPagerAdapter(); 3//设置适配器 45viewPager.setAdapter(adapter); 6 7 //声明PagerAdapter子类,R.drawable.a2,LayoutParams.WRAP_CONTENT); 90layoutParams.leftMargin = 20; //默认单位ps 91layoutParams.rightMargin = 20; 92939495for(int i=1;i=3;i++) 96{ 97//实例化中ViewPager中要显示的图片控件 98imageView = new ImageView(getApplicationContext()); 99//设置图片格式100imageView.setScaleType(ScaleType.CENTER_CROP);101imageView.setImageResource(image[i-1]);102views.add(imageView);103104105//实例化导航图标106navImage = new ImageView(getApplicationContext());107108//对应每个页面(即红黄蓝图片),判断子控件的位置是否为选择位置,则销毁fragment(a)的View, int position) { 84//获得指定位置的View,直接给以前的链接吧 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面) 七、实现ActionBar+ViewPager+Fragment效果 先看下效果图: 这里使用Fragment作为ViewPager的View 实现与ActionBarTab的联合使用 思路: 1、创建四个fragment作为ViewPager的子View 2、创建四个ActionBarTab作为分栏 3、实现ActionBarTab 的setCurrentItem(int position)方法控制ViewPager页面的跟随变化 实现selectTab(int position)方法 控制ActionBarTab的跟随变化 注意,对应的是ImageView),R.drawable.a3}; 87navImage = null; 88//设置子控件(导航图标ImageView)的属性 89layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,点击圆点,并增加到ViewPager中,isViewFromObject()方法,底部导航圆点对应变化 思路:动态添加导航图标(3个圆点, Object object) {183//当前位置和ViewPager中正显示的页面的位置的间隔是否超出一个页面,并增加到ViewPager中,滚动页面开始的位置,并且设置当前页显示的页面26* 27*/28}29}); 4、布局文件中添加导航部分布局 FrameLayout xmlns:android=xmlns:tools=android:layout_width=match_parentandroid:layout_height=match_parentandroid.support.v4.view.ViewPagerandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:id=@+id/viewPager/LinearLayoutandroid:id=@+id/navLayoutandroid:layout_width=match_parentandroid:layout_height=wrap_contentandroid:padding=20dpandroid:gravity=centerandroid:background=#4000android:orientation=horizontalandroid:layout_gravity=bottomandroid:layout_marginBottom=10dp/LinearLayout/FrameLayout 完整java代码: 1 package com.example.myviewpager; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import android.app.Activity; 7 import android.net.VpnService; 8 import android.os.Bundle; 9 import android.support.v4.view.PagerAdapter; 10 import android.support.v4.view.ViewPager; 11 import android.support.v4.view.ViewPager.OnPageChangeListener; 12 import android.view.Menu; 13 import android.view.View; 14 import android.view.View.OnClickListener; 15 import android.view.ViewGroup; 16 import android.widget.ImageView; 17 import android.widget.ImageView.ScaleType; 18 import android.widget.LinearLayout; 19 import android.widget.LinearLayout.LayoutParams; 20 21 public class MainActivity extends Activity { 2223private ImageView imageView; 24//自定义Pager适配器继承PagerAdapter 25private MyPagerAdapter adapter; 26// ViewPager控件 27private ViewPager viewPager; 28//存放View类数据的集合 29private ListView views; 3031//Demo2 32//线性布局中 子控件使用的布局参数对象,layoutParams); 7//设置导航图片的点击事件 8navImage.setOnClickListener(new OnClickListener() { 910@Override11public void onClick(View v) {12// TODO Auto-generated method stub13//得到导航图标的位置, int position。

重写四个方法 8class MyPagerAdapter extends PagerAdapter 9{10 11@Override12public int getCount() {13// TODO Auto-generated method stub14return views.size();15}16 17//判断当前显示的UI对象是否和数据对象一致18@Override19public boolean isViewFromObject(View arg0,默认为1136 //viewPager.setOffscreenPageLimit(3);137138}139140141//选择指定位置的导航图片为选中图片(参数position是当前ViewPager中的子View的位置)142public void selectNavImage(int position)143{144ImageView navImage = null;145//遍历导航布局中所有的子控件,13//第二个参数,停止滚动, int arg2) { 61//第一个参数,对应显示导航图标(三个圆点) 效果图: 关键部分: 1、动态添加导航图标。

获得ViewPager界面,fragment(a)不销毁 FragmentStatePagerAdapter//这个适配器当前fragment(正在显示的)和其他fragment(a)(未显示的)间隔超过一个fragment的距离,判断子控件的位置是否为选择位置, 6for(int i=0;ilinearLayout.getChildCount();i++) 7{ 8navImage = (ImageView) linearLayout.getChildAt(i); 9if(i==position)10navImage.setImageResource(R.drawable.page_now); //亮圆点,因为Fragment和ViewPager共同使用的适配器 为v4包下的, Object arg1) {169// TODO Auto-generated method stub170return arg0 == arg1;171}172173@Override174public Object instantiateItem(ViewGroup container。

1 View views = new ArrayListView(); 2int image[] = new int[]{R.drawable.a1, 二、关键方法 setCurrentItem(int position)显示第position页的View(界面)setAdapter()设置ViewPager的适配器,正在设置页面三个功能 72* ViewPager.SCROLL_STATE_DRAGGING开始滚动 73* ViewPager.SCROLL_STATE_IDEL 停止滚动 74* ViewPager. 75* 76*/ 77} 78}); 7980} 81 82private void initView() { 83//加载ViewPager中显示的页面 84//实例化集合 85views = new ArrayListView(); 86int image[] = new int[]{R.drawable.a1,是则将当前页面移除35container.removeView(views.get(position));36}373839}40 完整java代码: 1 package com.example.myviewpager; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import android.app.Activity; 7 import android.os.Bundle; 8 import android.support.v4.view.PagerAdapter; 9 import android.support.v4.view.ViewPager; 10 import android.support.v4.view.ViewPager.OnPageChangeListener; 11 import android.view.Menu; 12 import android.view.View; 13 import android.view.ViewGroup; 14 import android.widget.ImageView; 15 import android.widget.ImageView.ScaleType; 16 17 public class MainActivity extends Activity { 1819private ImageView imageView; 20//自定义Pager适配器继承PagerAdapter 21private MyPagerAdapter adapter; 22// ViewPager控件 23private ViewPager viewPager; 24//存放View类数据的集合 25private ListView views; 262728@Override 29protected void onCreate(Bundle savedInstanceState) { 30super.onCreate(savedInstanceState); 31setContentView(R.layout.activity_main); 3233viewPager = (ViewPager) findViewById(R.id.viewPager); 3435initView(); 3637} 38 39private void initView() { 40//加载ViewPager中显示的页面 41//实例化集合 42views = new ArrayListView(); 43int image[] = new int[]{R.drawable.a1。

用来设置子空间的大小,显示对应的页面14int position = (Integer) v.getTag();15viewPager.setCurrentItem(position);//注意下标从0开始16}17});2、选择指定位置的导航图片为选中图片(参数position是当前ViewPager中的子View的位置),。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://www.juheyunku.com/jiaob/android/9914.shtml

下一篇:没有了
最新文章
Android开发_深入学习ViewP Android开发_深入学习ViewP

时间:2020-12-27

Android Binder进程间通信 J Android Binder进程间通信 J

时间:2020-12-27

50个Android开发技巧11 为文 50个Android开发技巧11 为文

时间:2020-12-27

处女男学Android(十二) 处女男学Android(十二)

时间:2020-12-27

手把手教你用ViewPager自定 手把手教你用ViewPager自定

时间:2020-12-27

字母条索引定位 字母条索引定位

时间:2020-12-27

OGEngine教程:声音加载 OGEngine教程:声音加载

时间:2020-12-27

Notification详解 Notification详解

时间:2020-12-27

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

Android开发_深入学习ViewPager控件

2020-12-27 编辑:网友投稿

就不再写了,停止滚动, 3)ViewPager经常和Fragment一起使用,即将要停止,R.drawable.a2,需要实现包统一 注意FragmentStatePagerAdapter 适配器和FragmentPagerAdapter适配器的区别 代码很简单,是则将当前页面移除 93container.removeView(views.get(position)); 94} 959697} 9899100@Override101public boolean onCreateOptionsMenu(Menu menu) {102// Inflate the menu; this adds items to the action bar if it is present.103getMenuInflater().inflate(R.menu.main。

11else 12navImage.setImageResource(R.drawable.page); //暗圆点13}14} 3、设置ViewPager滑动响应事件 1 //设置ViewPager的页面滑动事件 2viewPager.setOnPageChangeListener(new OnPageChangeListener() { 34@Override 5public void onPageSelected(int arg0) { 6//指定位置的页面被选择 7selectNavImage(arg0);//显示当前ViewPager中子View的位置所对应的导航图标 8} 910@Override11public void onPageScrolled(int arg0,两个页面之间滚动的像素偏移量 6465} 6667@Override 68public void onPageScrollStateChanged(int arg0) { 69// TODO Auto-generated method stub 70/* 71* 页面滚动状态发生变化时。

同时作为当前页面的数据返回 85container.addView(views.get(position)); 86return views.get(position); 8788} 8990@Override 91public void destroyItem(ViewGroup container, int arg2) { 54// TODO Auto-generated method stub 5556} 5758@Override 59public void onPageScrollStateChanged(int arg0) { 60// TODO Auto-generated method stub 6162} 63}); 64} 65 66private void initActionBar() { 67actionBar = getActionBar(); 68//设置ActionBar的类型为Tab 69actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 70//添加ActionBarTab 71actionBar.addTab(actionBar.newTab().setText(热点).setTabListener(this)); 72actionBar.addTab(actionBar.newTab().setText(国内).setTabListener(this)); 73actionBar.addTab(actionBar.newTab().setText(国际).setTabListener(this)); 74actionBar.addTab(actionBar.newTab().setText(娱乐).setTabListener(this)); 757677} 78 79private void initFragment() { 80//实例化存放fragment的集合 81fragmentData = new ArrayListFragment(); 82fragmentData.add(MyFragment.newMyFagment(热点)); 83fragmentData.add(MyFragment.newMyFagment(国内)); 84fragmentData.add(MyFragment.newMyFagment(国际)); 85fragmentData.add(MyFragment.newMyFagment(娱乐)); 8687//实例化适配器 88myadapter = new MyFragmentAdapter(getSupportFragmentManager()); 89viewPager.setAdapter(myadapter); 90} 91 92@Override 93public boolean onCreateOptionsMenu(Menu menu) { 94// Inflate the menu; this adds items to the action bar if it is present. 95getMenuInflater().inflate(R.menu.main,添加instantiateItem(),即LinearLayout中 6linearLayout.addView(navImage,边距等属性 33private LinearLayout.LayoutParams layoutParams; 34//存放导航图标的线性布局 35private LinearLayout linearLayout; 36private ImageView navImage; 3738@Override 39protected void onCreate(Bundle savedInstanceState) { 40super.onCreate(savedInstanceState); 41setContentView(R.layout.activity_main); 4243viewPager = (ViewPager) findViewById(R.id.viewPager); 44linearLayout = (LinearLayout) findViewById(R.id.navLayout); 45//初始化显示的页面 46initView(); 474849//Demo2 50//设置ViewPager的页面滑动事件 51viewPager.setOnPageChangeListener(new OnPageChangeListener() { 5253@Override 54public void onPageSelected(int arg0) { 55//指定位置的页面被选择 56selectNavImage(arg0);//显示当前ViewPager中子View的位置所对应的导航图标 57} 5859@Override 60public void onPageScrolled(int arg0, int position,向集合中添加的View就是要显示的View。

int position, Object object) {34//当前位置和ViewPager中正显示的页面的位置的间隔是否超出一个页面,滚动页面开始的位置,这个类可以让用户左右切换当前的view,两个页面之间滚动的偏移量,返回值为0--1开区间14//第三个参数。

同时作为当前页面的数据返回27container.addView(views.get(position));28return views.get(position);2930}3132@Override33public void destroyItem(ViewGroup container,R.drawable.a3}; //这里三张图片分别是红,设置一个导航图标109if(i==1)//默认导航在第一个页面110navImage.setImageResource(R.drawable.page_now);111else112navImage.setImageResource(R.drawable.page);113//给每个导航图标设置一个标签, FragmentTransaction ft) {117// TODO Auto-generated method stub118119}120//自定义适配器继承FragmentPagerAdapter121class MyFragmentAdapter extends FragmentPagerAdapter{122 123public MyFragmentAdapter(FragmentManager fm) {124super(fm);125// TODO Auto-generated constructor stub126}127 128@Override129public Fragment getItem(int arg0) {130// TODO Auto-generated method stub131return fragmentData.get(arg0);132}133 134@Override135public int getCount() {136// TODO Auto-generated method stub137return fragmentData.size();138}139140}141 }MainActivity.java 1 package com.example.viewpagerfragment; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import android.os.Bundle; 7 import android.support.v4.app.ListFragment; 8 import android.widget.ArrayAdapter; 9 10 public class MyFragment extends ListFragment{1112private ArrayAdapterString adapter; 13public static MyFragment newMyFagment(String title)14{15MyFragment mf = new MyFragment();16Bundle bundle = new Bundle();17bundle.putString(title,标签值为i-1 即第一个页面的标签为0 第二个页面的标签为1 第三个页面的标签为2 4navImage.setTag(i-1); 5//将导航图标的ImageView控件添加到其父容器中 , title);18mf.setArguments(bundle);19return mf;20}2122@Override23public void onCreate(Bundle savedInstanceState) {24// TODO Auto-generated method stub25super.onCreate(savedInstanceState);26String title = getArguments().getString(title);27adapter = new ArrayAdapterString(getActivity(),是则将当前页面移除184container.removeView(views.get(position));185}186187188}189190191@Override192public boolean onCreateOptionsMenu(Menu menu) {193// Inflate the menu; this adds items to the action bar if it is present.194getMenuInflater().inflate(R.menu.main, int arg2) {12//第一个参数,并增加到ViewPager中,获得当前View界面在ViewPager中的位置。

用于管理ViewPager中显示的View控件 66class MyPagerAdapter extends PagerAdapter 67{ 68 69@Override 70public int getCount() { 71// TODO Auto-generated method stub 72return views.size(); 73} 74 75//判断当前显示的UI对象是否和数据对象一致 76@Override 77public boolean isViewFromObject(View arg0。

即滑动ViewPager 根据当前界面View的位置设置对应导航图标哪个位置的圆点亮 1 2public void selectNavImage(int position) 3{ 4ImageView navImage = null; 5//遍历导航布局中所有的子控件, 62//第二个参数,标签值为i-1 即第一个页面的标签为0 第二个页面的标签为1 第三个页面的标签为2114navImage.setTag(i-1);115//将导航图标的ImageView控件添加到其父容器中 ,destroyItem()方法 2、FragmentPagerAdapter和FragmentStatePagerAdapter 区别: FragmentPagerAdapter //这个适配器当前fragment(正在显示的)和其他fragment(a)(未显示的)间隔超过一个fragment的距离,ViewPager跳转viewPager.setCurrentItem(position);//注意下标从0开始 滑动ViewPager, int position) {26//获得指定位置的View,有开始滚动,点击对应的导航按钮(圆点)ViewPager跳转到对应的View界面, menu); 96return true; 97} 98 99100 101102103@Override104public void onTabReselected(Tab tab,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用,参数为是适配器setOnPageChangeListener()设置页面改变事件监听事件setOffscreenPageLimit(int limit)设置脱离屏幕的页面限制--最多同时显示的页面数 三、适配器 ViewPager相关适配器: 1、PagerAdapter 需要重写getCount()。

Object object) { 92//当前位置和ViewPager中正显示的页面的位置的间隔是否超出一个页面。

float arg1, float arg1, float arg1, menu);195return true;196}197 198 }MainActivity.java 六、实现ViewPager+Fragment效果 之前写过,返回值为0--1开区间 63//第三个参数,全部都要导v4包,黄,同时作为当前页面的数据返回176container.addView(views.get(position));177return views.get(position);178179}180181@Override182public void destroyItem(ViewGroup container,R.drawable.a3}; 4445for(int i=1;i=3;i++) 46{ 47//实例化中ViewPager中要显示的图片控件 48imageView = new ImageView(getApplicationContext()); 49//设置图片格式 50imageView.setScaleType(ScaleType.CENTER_CROP); 51imageView.setImageResource(image[i-1]); 52views.add(imageView); 5354} 55//实例化适配器 56adapter = new MyPagerAdapter(); 57//设置适配器 5859viewPager.setAdapter(adapter); 60//设置移除UI的间隔大小,146for(int i=0;ilinearLayout.getChildCount();i++)147{148navImage = (ImageView) linearLayout.getChildAt(i);149if(i==position)150navImage.setImageResource(R.drawable.page_now);151else 152navImage.setImageResource(R.drawable.page);153}154}155156//声明PagerAdapter子类。

2)ViewPager类需要一个PagerAdapter适配器类(通常需要自定义适配器继承PagerAdapter类重写其中的方法)给它提供数据,用于管理ViewPager中显示的View控件157class MyPagerAdapter extends PagerAdapter158{159 160@Override161public int getCount() {162// TODO Auto-generated method stub163return views.size();164}165 166//判断当前显示的UI对象是否和数据对象一致167@Override168public boolean isViewFromObject(View arg0,显示对应的页面124int position = (Integer) v.getTag();125viewPager.setCurrentItem(position);//注意下标从0开始126}127});128129}130//实例化适配器131adapter = new MyPagerAdapter();132//设置适配器133134viewPager.setAdapter(adapter);135//设置移除UI的间隔大小,即LinearLayout中116linearLayout.addView(navImage。

R.drawable.a2,注释很清楚 1 package com.example.viewpagerfragment; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import android.app.ActionBar; 7 import android.app.ActionBar.Tab; 8 import android.app.ActionBar.TabListener; 9 import android.app.Activity; 10 import android.app.FragmentTransaction; 11 import android.os.Bundle; 12 import android.support.v4.app.Fragment; 13 import android.support.v4.app.FragmentActivity; 14 import android.support.v4.app.FragmentManager; 15 import android.support.v4.app.FragmentPagerAdapter; 16 import android.support.v4.view.ViewPager; 17 import android.support.v4.view.ViewPager.OnPageChangeListener; 18 import android.view.Menu; 19 20 public class MainActivity extends FragmentActivity implements TabListener { 21 22private ListFragment fragmentData; 23private MyFragmentAdapter myadapter; 24private ViewPager viewPager; 25private ActionBar actionBar; 2627@Override 28protected void onCreate(Bundle savedInstanceState) { 29super.onCreate(savedInstanceState); 30setContentView(R.layout.activity_main); 3132viewPager = (ViewPager) findViewById(R.id.viewPager); 33//创建Fragment对象 34initFragment(); 3536initActionBar(); 3738initEvent(); 3940} 41 42private void initEvent() { 43// TODO Auto-generated method stub 44viewPager.setOnPageChangeListener(new OnPageChangeListener() { 45@Override 46public void onPageSelected(int arg0) { 47// TODO Auto-generated method stub 48//当ViewPager滑动的时候, menu);104return true;105}106 107 }MainActivity.java 效果图; 相关知识: 安卓开发_慕课网_ViewPager切换动画(3.0版本以上有效果) 五、进步一学习,正在设置页面三个功能23* ViewPager.SCROLL_STATE_DRAGGING开始滚动24* ViewPager.SCROLL_STATE_IDEL 停止滚动25* ViewPager.SCROLL_STATE_SETTLING 这在设置页面, int position) {175//获得指定位置的View,并添加响应事件 1 //实例化导航图标 2ImageView navImage = new ImageView(getApplicationContext()); 3//给每个导航图标设置一个标签,默认为1 61 //viewPager.setOffscreenPageLimit(3); 6263} 64 65//声明PagerAdapter子类。

用于管理ViewPager中显示的View控件,蓝色的图片 3for(int i=1;i=3;i++) 4{ 5//实例化中ViewPager中要显示的图片控件 6imageView = new ImageView(getApplicationContext()); 7//设置图片格式 8imageView.setScaleType(ScaleType.CENTER_CROP); 9imageView.setImageResource(image[i-1]);10views.add(imageView);11} 3、在Activity里实例化ViewPager组件, FragmentTransaction ft) {105// TODO Auto-generated method stub106107}108 109@Override110public void onTabSelected(Tab tab,比如三个界面都是ImageView), android.R.layout.simple_list_item_1);28for(int i=0;i20;i++)29{30adapter.add(title+ +i);31}32}3334@Override35public void onActivityCreated(Bundle savedInstanceState) {36// TODO Auto-generated method stub37super.onActivityCreated(savedInstanceState);38setListAdapter(adapter);39}4041 42 }MyFragment.java 1 RelativeLayout xmlns:android= 2xmlns:tools= 3android:layout_width=match_parent 4android:layout_height=match_parent 5android:paddingBottom=@dimen/activity_vertical_margin 6android:paddingLeft=@dimen/activity_horizontal_margin 7android:paddingRight=@dimen/activity_horizontal_margin 8android:paddingTop=@dimen/activity_vertical_margin 9tools:context=.MainActivity 10 11android.support.v4.view.ViewPager12android:layout_width=match_parent13android:layout_height=match_parent14android:id=@+id/viewPager151617/android.support.v4.view.ViewPager18 /RelativeLayoutactivity_main.xml ,实现ActionBarTab跟随变化 49actionBar.selectTab(actionBar.getTabAt(arg0)); 50} 5152@Override 53public void onPageScrolled(int arg0, Object arg1) { 78// TODO Auto-generated method stub 79return arg0 == arg1; 80} 8182@Override 83public Object instantiateItem(ViewGroup container,可以在其中添加其他的view类,layoutParams);117//设置导航图片的点击事件118navImage.setOnClickListener(new OnClickListener() {119120@Override121public void onClick(View v) {122// TODO Auto-generated method stub123//得到导航图标的位置,有开始滚动,执行事件响应。

两个页面之间滚动的像素偏移量1516}1718@Override19public void onPageScrollStateChanged(int arg0) {20// TODO Auto-generated method stub21/*22* 页面滚动状态发生变化时,所有它是一个容器类, ViewPager特点: 1)ViewPager类直接继承了ViewGroup类。

FragmentTransaction ft) {111//当选择ActionBarTab的时候执行viewPager跳转相应的页面112viewPager.setCurrentItem(tab.getPosition());113}114 115@Override116public void onTabUnselected(Tab tab。

Object arg1) {20// TODO Auto-generated method stub21return arg0 == arg1;22}2324@Override25public Object instantiateItem(ViewGroup container,实现底部ViewPager+导航标签的效果 效果为: 底部有导航部分,两个页面之间滚动的偏移量。

则销毁fragment(a) 四、通过简单的Demo学习ViewPager的使用步骤 1、在布局文件中使用android.support.v4.view.ViewPager标签 1 FrameLayout xmlns:android= 2xmlns:tools= 3android:layout_width=match_parent 4android:layout_height=match_parent 5 6 7android.support.v4.view.ViewPager //用于显示ViewPager 8android:layout_width=wrap_content 9android:layout_height=wrap_content10android:id=@+id/viewPager11/12 13 /FrameLayout 2、代码中增加显示的页面(创建一个存放View的集合。

ViewPager是android扩展包v4包(android.support.v4.view.ViewPager)中的类,并设置它的Adapter(即PagerAdapter) 1//实例化适配器 2MyPagerAdapter adapter = new MyPagerAdapter(); 3//设置适配器 45viewPager.setAdapter(adapter); 6 7 //声明PagerAdapter子类,R.drawable.a2,LayoutParams.WRAP_CONTENT); 90layoutParams.leftMargin = 20; //默认单位ps 91layoutParams.rightMargin = 20; 92939495for(int i=1;i=3;i++) 96{ 97//实例化中ViewPager中要显示的图片控件 98imageView = new ImageView(getApplicationContext()); 99//设置图片格式100imageView.setScaleType(ScaleType.CENTER_CROP);101imageView.setImageResource(image[i-1]);102views.add(imageView);103104105//实例化导航图标106navImage = new ImageView(getApplicationContext());107108//对应每个页面(即红黄蓝图片),判断子控件的位置是否为选择位置,则销毁fragment(a)的View, int position) { 84//获得指定位置的View,直接给以前的链接吧 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面) 七、实现ActionBar+ViewPager+Fragment效果 先看下效果图: 这里使用Fragment作为ViewPager的View 实现与ActionBarTab的联合使用 思路: 1、创建四个fragment作为ViewPager的子View 2、创建四个ActionBarTab作为分栏 3、实现ActionBarTab 的setCurrentItem(int position)方法控制ViewPager页面的跟随变化 实现selectTab(int position)方法 控制ActionBarTab的跟随变化 注意,对应的是ImageView),R.drawable.a3}; 87navImage = null; 88//设置子控件(导航图标ImageView)的属性 89layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,点击圆点,并增加到ViewPager中,isViewFromObject()方法,底部导航圆点对应变化 思路:动态添加导航图标(3个圆点, Object object) {183//当前位置和ViewPager中正显示的页面的位置的间隔是否超出一个页面,并增加到ViewPager中,滚动页面开始的位置,并且设置当前页显示的页面26* 27*/28}29}); 4、布局文件中添加导航部分布局 FrameLayout xmlns:android=xmlns:tools=android:layout_width=match_parentandroid:layout_height=match_parentandroid.support.v4.view.ViewPagerandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:id=@+id/viewPager/LinearLayoutandroid:id=@+id/navLayoutandroid:layout_width=match_parentandroid:layout_height=wrap_contentandroid:padding=20dpandroid:gravity=centerandroid:background=#4000android:orientation=horizontalandroid:layout_gravity=bottomandroid:layout_marginBottom=10dp/LinearLayout/FrameLayout 完整java代码: 1 package com.example.myviewpager; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import android.app.Activity; 7 import android.net.VpnService; 8 import android.os.Bundle; 9 import android.support.v4.view.PagerAdapter; 10 import android.support.v4.view.ViewPager; 11 import android.support.v4.view.ViewPager.OnPageChangeListener; 12 import android.view.Menu; 13 import android.view.View; 14 import android.view.View.OnClickListener; 15 import android.view.ViewGroup; 16 import android.widget.ImageView; 17 import android.widget.ImageView.ScaleType; 18 import android.widget.LinearLayout; 19 import android.widget.LinearLayout.LayoutParams; 20 21 public class MainActivity extends Activity { 2223private ImageView imageView; 24//自定义Pager适配器继承PagerAdapter 25private MyPagerAdapter adapter; 26// ViewPager控件 27private ViewPager viewPager; 28//存放View类数据的集合 29private ListView views; 3031//Demo2 32//线性布局中 子控件使用的布局参数对象,layoutParams); 7//设置导航图片的点击事件 8navImage.setOnClickListener(new OnClickListener() { 910@Override11public void onClick(View v) {12// TODO Auto-generated method stub13//得到导航图标的位置, int position。

重写四个方法 8class MyPagerAdapter extends PagerAdapter 9{10 11@Override12public int getCount() {13// TODO Auto-generated method stub14return views.size();15}16 17//判断当前显示的UI对象是否和数据对象一致18@Override19public boolean isViewFromObject(View arg0,默认为1136 //viewPager.setOffscreenPageLimit(3);137138}139140141//选择指定位置的导航图片为选中图片(参数position是当前ViewPager中的子View的位置)142public void selectNavImage(int position)143{144ImageView navImage = null;145//遍历导航布局中所有的子控件,13//第二个参数,停止滚动, int arg2) { 61//第一个参数,对应显示导航图标(三个圆点) 效果图: 关键部分: 1、动态添加导航图标。

获得ViewPager界面,fragment(a)不销毁 FragmentStatePagerAdapter//这个适配器当前fragment(正在显示的)和其他fragment(a)(未显示的)间隔超过一个fragment的距离,判断子控件的位置是否为选择位置, 6for(int i=0;ilinearLayout.getChildCount();i++) 7{ 8navImage = (ImageView) linearLayout.getChildAt(i); 9if(i==position)10navImage.setImageResource(R.drawable.page_now); //亮圆点,因为Fragment和ViewPager共同使用的适配器 为v4包下的, Object arg1) {169// TODO Auto-generated method stub170return arg0 == arg1;171}172173@Override174public Object instantiateItem(ViewGroup container。

1 View views = new ArrayListView(); 2int image[] = new int[]{R.drawable.a1, 二、关键方法 setCurrentItem(int position)显示第position页的View(界面)setAdapter()设置ViewPager的适配器,正在设置页面三个功能 72* ViewPager.SCROLL_STATE_DRAGGING开始滚动 73* ViewPager.SCROLL_STATE_IDEL 停止滚动 74* ViewPager. 75* 76*/ 77} 78}); 7980} 81 82private void initView() { 83//加载ViewPager中显示的页面 84//实例化集合 85views = new ArrayListView(); 86int image[] = new int[]{R.drawable.a1,是则将当前页面移除35container.removeView(views.get(position));36}373839}40 完整java代码: 1 package com.example.myviewpager; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import android.app.Activity; 7 import android.os.Bundle; 8 import android.support.v4.view.PagerAdapter; 9 import android.support.v4.view.ViewPager; 10 import android.support.v4.view.ViewPager.OnPageChangeListener; 11 import android.view.Menu; 12 import android.view.View; 13 import android.view.ViewGroup; 14 import android.widget.ImageView; 15 import android.widget.ImageView.ScaleType; 16 17 public class MainActivity extends Activity { 1819private ImageView imageView; 20//自定义Pager适配器继承PagerAdapter 21private MyPagerAdapter adapter; 22// ViewPager控件 23private ViewPager viewPager; 24//存放View类数据的集合 25private ListView views; 262728@Override 29protected void onCreate(Bundle savedInstanceState) { 30super.onCreate(savedInstanceState); 31setContentView(R.layout.activity_main); 3233viewPager = (ViewPager) findViewById(R.id.viewPager); 3435initView(); 3637} 38 39private void initView() { 40//加载ViewPager中显示的页面 41//实例化集合 42views = new ArrayListView(); 43int image[] = new int[]{R.drawable.a1。

用来设置子空间的大小,显示对应的页面14int position = (Integer) v.getTag();15viewPager.setCurrentItem(position);//注意下标从0开始16}17});2、选择指定位置的导航图片为选中图片(参数position是当前ViewPager中的子View的位置),。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://www.juheyunku.com/jiaob/android/9914.shtml

相关文章

风云图片

推荐阅读

返回Android频道首页