viewpager的学习

        之前对viewpager没怎么用过,今天就自己学习看一看,它根继承于 Object类,在object类之后,则是View和ViewGroup类,一般,我们使用的是android.support.v4.view.viewpaer,所以在使用时在布局文件里,引入具体的包名跟类

<android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >


        <android.support.v4.view.PagerTitleStrip
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="50dip"
            android:gravity="center" />
    </android.support.v4.view.ViewPager>


  在上面的代码中,我们可以看到,对于viewpager的具体包名跟类名,会写的很详细,PagerTitleStrip是表示viewpager显示的标题,它必须作为viewpager的子目录而存在,否则就会出错,

    用viewpager来做界面的浏览,主要有以下几个步骤:

    首先,viewpager的申明,在布局文件中申明之后,在Activity中找到申明

     viewPager = (ViewPager) MainActivity.this.findViewById(R.id.viewpager);

    在对viewpager进行申明之后,则我们需要考虑的问题就是,我们的界面需要展现多少个分界面,于是我们就需要构建多少个xml界面来构成,在此处我们分别构建了三个xml布局文件,由于代码比较简单,不再贴出,在Activity中加入需要加入的界面。

viewList = new ArrayList<View>();
		View view1 = LayoutInflater.from(MainActivity.this).inflate(
				R.layout.tab1, null);
		View view2 = LayoutInflater.from(MainActivity.this).inflate(
				R.layout.tab2, null);
		View view3 = LayoutInflater.from(MainActivity.this).inflate(
				R.layout.tab3, null);
		View view4 = LayoutInflater.from(MainActivity.this).inflate(
				R.layout.tab4, null);
		viewList.add(view1);
		viewList.add(view2);
		viewList.add(view3);
		viewList.add(view4);

   其次,对PagerTitleStrip进行标题的定义和预设,通过数组引入

               titleS = new ArrayList<String>();
               titleS.add("First");
               titleS.add("Second");
               titleS.add("Three");
               titleS.add("Four");

   再次,viewpager也和Listview这些组件一样,需要自己的适配器来进行匹配,所以需要进行适配器的编写。

    

private class MyAdapter extends PagerAdapter {

		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			// TODO Auto-generated method stub
			((ViewPager)container).addView(viewList.get(position));
			
			return viewList.get(position);
		}
		
		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			// TODO Auto-generated method stub
			
			((ViewPager)container).removeView(viewList.get(position));
		}
		
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return viewList.size();
		}

		@Override
		public CharSequence getPageTitle(int position) {
			// TODO Auto-generated method stub
			return titleS.get(position);
		}
		
		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			// TODO Auto-generated method stub
			return arg0 == arg1;
		}

	}
   在上面的适配器的继承中,我们一般需要实现以上几个方法。

     bject instantiateItem(ViewGroup container, int position)  // 对它的一个初始化

    void destroyItem(ViewGroup container, int position, Object object) //在页面进行切换后的一个销毁
<pre name="code" class="java">    int getCount() //切换界面的个数
<pre name="code" class="java">    CharSequence getPageTitle(int position) // 与之对应的标题
<pre name="code" class="java">    public boolean isViewFromObject(View arg0, Object arg1) {
			// TODO Auto-generated method stub
			return arg0 == arg1;
} //官方的一个写法,就照着这么写就是了

 
 

在配置好适配器之后,最简单的初级效果就显示了。


 
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">   最后,viewPager.setOnPageChangeListener(new MyOnpageChangeListener()); 由于很多的时候,viewpager上的数据并不是写死的,而是会通过连接网络来获取数据,那么我们就需要知道,一般在哪里能够监听数据的获取与变换呢?此时我们则需要增加界面的改变监听。</span>

private class MyOnpageChangeListener implements  ViewPager.OnPageChangeListener {

		@Override
		public void onPageScrollStateChanged(int a) {
			// TODO Auto-generated method stub
//			Log.i(TAG, ">>>>>>a>>>>>"+a);
		}

		@Override
		public void onPageScrolled(int b, float c, int d) {
			// TODO Auto-generated method stub
			Log.i(TAG, ">>>>>>b>>>>>"+b);
//			Log.i(TAG, ">>>>>>c>>>>>"+c);
//			Log.i(TAG, ">>>>>>d>>>>>"+d);
			
		}

		@Override
		public <span style="font-family: Arial, Helvetica, sans-serif;">void onPageSelected(int e)</span>
 {
			// TODO Auto-generated method stub
//			Log.i(TAG, ">>>>>e>>>>>>"+e);
			
		}
		
	}

    自定义派生类实现onPagerChangeListener,它主要需要三个方法,第一个方法 onPageScrollStateChanged(int a)中,它表示pager的滑动状态的改变,它的int值有三个,分别为

  SCROLL_STATE_IDLE    = 0,表示无任何动作与行为,

 SCROLL_STATE_DRAGGING = 1,  表示正在滑动中

SCROLL_STATE_SETTING = 2   滑动完成

     void onPageSelected(int e)方法,它表示当前选择的pager,从position = 0开始计算,而下一个要显示的则表示为position + 1,只有当界面完全滑动定下来之后就会改变 。

   void onPageScrolled(int b, float c, int d) 这个方法中,三个参数分别表示
<span style="font-family: Arial, Helvetica, sans-serif;">         b  position 表示位置,从0开始,切换一个就进行改变;</span>
     c positionOffset它是一个[0, 1)的一个浮点值,表示界面位置的一个偏移量,我自己是这么理解的,就是说一个界面大概偏移了多少,如果偏移了0.5f,则到了一半,再多一点就进入下一个界面,没有到一半,松手后还是保持当前的界面不切换,欢迎大侠指点下看是不是这么理解的。
     d positionOffsetPixels 表示像素的偏移值</span>

   Log日志如下

   


源代码下载: http://download.csdn.net/detail/u012159034/8984279

 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值