安卓控件使用系列33:ViewPager多页面滑动控件的使用方法2
来源:互联网 发布:mac图片怎么保存 编辑:程序博客网 时间:2024/05/22 11:51
安卓中使用ViewPager实现多页面滑动的效果不是只有一种方法,下面将另一种方法分享给大家。
这个例子实现的是滑动页面不断出现新的相同的页面的效果。
整体思路:在xml文件中添加android.support.v4.view.ViewPager、android.support.v4.view.PagerTitleStrip,新建一个xml文件,里面放入任意控件;在活动中把新建的布局文件加载在原来的xml文件上,把这个布局文件放到一个动态数组中,把页面的标题以字符串的形式放入到另一个动态数组中,定义一个MyAdapter类继承PagerAdapter类,重写里面的方法,getCount方法用于返回布局的个数,destroyItem方法用于删除某个布局,getPageTitle方法用于得到某个页面的标题,instantiateItem方法用于初始化这个适配器,isViewFromObject用于判断两个对象是否相同,然后把这个MyAdapter类绑定到MyAdapter这个控件上。设置MyAdapter控件的setOnPageChangeListener这个事件,重写里面的方法,onPageSelected方法是在选择一个页面的时候触发的,onPageScrolled方法是页面开始滑动的时候触发的(不建议把加载网络数据的操作放在这里,因为这样会导致还没到达下一个页面的时候就开始加载网络数据,给程带来比较大的负担),onPageScrollStateChanged方法是页面已经滑动到下一个的时候触发的事件(把加载数据的操作放在这里比较合理),在这里添加并刷新适配器的数据,这几个方法都用Log的形式输出了不同的提示信息,用于开发人员观察各个方法的触发形式和使用方法。
activity_main.xml文件:
<android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" > <android.support.v4.view.PagerTitleStrip android:id="@+id/pagertitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top" > </android.support.v4.view.PagerTitleStrip> </android.support.v4.view.ViewPager>tab.xml文件:
<!-- 自定义一个布局,用来填充 ViewPager的显示页面,可以来自本地或者网络的数据例如:图文混排的效果--> <ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" />
MainActivity.java文件:
private ViewPager viewPager; private PagerTitleStrip pagerTitleStrip; private MyAdapter adapter=null; private List<View> list=null; private List<String> title=null; private LayoutInflater inflater=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewPager=(ViewPager)findViewById(R.id.viewpager);pagerTitleStrip=(PagerTitleStrip)findViewById(R.id.pagertitle);adapter=new MyAdapter();//加载布局inflater=LayoutInflater.from(MainActivity.this);//第一次被加载的布局对象View tab=inflater.inflate(R.layout.tab, null);list=new ArrayList<View>();//加入到动态数组中list.add(tab);title=new ArrayList<String>();//加入到动态数组中title.add("title");//先初始化页面viewPager.setAdapter(adapter);//绑定适配器//选择发生变化的监听事件viewPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int arg0) {// TODO Auto-generated method stub Log.i("MainActivity", "arg0:"+arg0);}@Override//不建议在这个方法中加载网络数据,因为拉动不太大的距离时候会回到原来状态//这个方法的启动是在开始侧滑的时候,不一定滑动到下一个界面,只要开始滑动就会启动,所以不适合加载网路数据。public void onPageScrolled(int a, float b, int c) {// TODO Auto-generated method stubLog.i("MainActivity","a:"+a);Log.i("MainActivity","b:"+b);Log.i("MainActivity","c:"+c);Log.i("MainActivity","----------------");}@Override//在这个方法中完成界面的加载public void onPageScrollStateChanged(int d) {// TODO Auto-generated method stub//在这里开启线程去下载网络数据,来更新UI操作(这个方法的启动是在上一个界面完全退出,下一个界面完全进入的时候)View view=inflater.inflate(R.layout.tab, null);list.add(view);title.add("new title");//刷新数据adapter.notifyDataSetChanged();Log.i("MainActivity", "d:"+d);Log.i("MainActivity","----------------");}});}public class MyAdapter extends PagerAdapter{@Override//初始化这个适配器public Object instantiateItem(View container, int position) {// TODO Auto-generated method stub((ViewPager)container).addView(list.get(position));return list.get(position);}@Override//销毁这个适配器public void destroyItem(View container, int position, Object object) {// TODO Auto-generated method stub//super.destroyItem(container, position, object);((ViewPager)container).removeView(list.get(position));}@Override//得到每个界面的标题public CharSequence getPageTitle(int position) {// TODO Auto-generated method stubreturn title.get(position);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();//表示有多少个界面被加载}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {// TODO Auto-generated method stubreturn arg0==arg1;//判断两个是否为同一对象}}
- 安卓控件使用系列33:ViewPager多页面滑动控件的使用方法2
- 安卓控件使用系列32:ViewPager多页面滑动控件的使用方法1
- 安卓控件使用系列35:ListView列表控件显示表单的使用方法2
- 安卓控件使用系列14:ImageView的基本使用方法
- 【Android 开发】:UI控件之 ViewPager 多页面滑动效果控件的的使用
- 【Android 开发】:UI控件之 ViewPager 多页面滑动效果控件的的使用(二)
- 安卓控件使用系列13:SeekBar滑动控件的使用
- 安卓控件使用系列20:ProgressBar进度条控件的使用方法
- 安卓控件使用系列21:RatingBar评分控件的使用方法
- 安卓控件使用系列22:ScrollView垂直滚动控件的使用方法
- 安卓控件使用系列23:HorizontalScrollView 水平滚动控件的使用方法
- 安卓控件使用系列24:Gallery画廊控件的使用方法
- 安卓控件使用系列25:Spinner下拉列表控件的使用方法
- 安卓控件使用系列26:ImageSwitcher图片切换控件的使用方法
- 安卓控件使用系列27:GridView网格控件的使用方法
- 安卓控件使用系列31:ViewStub惰性装载控件的使用方法
- 安卓控件使用系列34:ListView列表控件显示表单的使用方法1
- 安卓控件使用系列30:TabHost卡片的使用方法3不继承TabActivity、TabHost控件、多个布局文件
- virtual studio 2015 开发php
- 弱校联盟国庆第二天 D题
- lua.c:80:31: fatal error: readline/readline.h: No such file or directory
- Spring AOP例子
- 剑指offer—复杂链表的复制
- 安卓控件使用系列33:ViewPager多页面滑动控件的使用方法2
- Game Programming Patterns-再探Flyweight模式
- Tutorial: Using Gazebo plugins with ROS
- 真迹调试小错误
- POJ 2082 The Fewest Coins
- mac上git的安装与配置
- c#多维数组
- 责任链模式----ChainOfResponsibility
- java线程池学习(四) —— Executors类