ViewPager

ViewPager是安卓3.0以上可以使用的控件,功能就是使视图左右滑动.在android.support.v4.view包下,是个扩展的自定义控件.故使格式:在布局文件里应该是android.support.v4.view.ViewPager


注意ViewPager的内部pager页面不能使用Activity与Fragment原因:

不能使用activity的原因:viewpager中存放是的view控件,activity不能返回view,activity是不能在veiwpager中使用


不能使用Fragment的原因:(以下是特有现象,但如果不是这种fragment多次嵌套fragment的话,可以使用fragment)

因为之前已经使用了HomeFragment,在接下来的操作还会有新界面创建,这样就会出现一个Fragment中使用了另一fragment,另一个fragment中又使用了一个fragment的现象,对于小内存的手机来说,容易内存溢出(OOM).


1.在所要使用的Activity的布局xml文件里定义这个组件,

    <android.support.v4.view.ViewPager   

        android:id="@+id/viewpager"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content" />

 

2.在Activity里找到ViewPager控件,并得到ViewPager控件对象.

    ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);

 

3.准备数据,创建ArrayList集合,在创建一个承载数据类型的bean类,把数据添加到bean类中,再把bean类挨个添加到集合中.

 

4.为ViewPager设置Adapter适配器

    vewPager.setAdapter(new 自定义的适配器类());

 

5.创建一个自定义的ViewPager适配器内部类,要继承ViewPager,并复写其方法


  class MyAdapter extends PagerAdapter{

	//ViewPager滑动的次数

public int getCount() {

//设置数小的话,图片到头了就没法循环出现,要想循环播放,一般指定50000次即可.return 50000;

//且报空指针异常的地方(一般和获取ViewPager当前选中的是第几页有关的都要改为position(当前页数)%list.size()(取余数)

     return list.size();

}


提示:如果想要ViewPager能向左滑动,只需要在主线程,

改变ViewPager的默认选中位置即可:viewPager.setCurrentItem(int);

 

       

	//该函数用来判断instantiateItem(ViewGroup, int)函数所返回来的Key
	// 与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View)

public boolean isViewFromObject(View view, Object object) {

return view == object;//这里是固定写法,一般不用变,写死了.

}

创建Pager的方法,相当于BaseAdapter的getView方法,很重要.(就是没有position类似的参数,所以没有优化)一般在该方法中要加载并返回View对象,并且要绑定数据,但是不需要复用Pager了,且返回container没有用.

//注意:是参数为ViewGroup container(container代表了ViewPager控件自身)的instantiateItem方法第二个,不要弄错了

        public Object instantiateItem(ViewGroup container, int position) {

            //1.加载View

            ImageView imageView = new ImageView(MainActivity.this);

            imageView.setScaleType(ScaleType.FIT_XY);//设置所包裹的图片占满整个屏幕

            //2.绑定数据到View

            imageView.setImageResource(list.get(position).getIconId());

            //注意:必须要将控件对象添加到VIewPager中来

            container.addView(imageView);

            return imageView;

        }



/**防止内存泄漏.相当于ListView的复用container

* 销毁一个page,该方法的实际就是将instantiateItem返回的VIew对象从ViewPager中移除,

container:还是ViewPager控件自身,object:则代表了View控件,使用时要强转成View一下

补充:为什么参数是Object,而不直接是View,因为虽然99%是view,但也有可能是Fragment,所以用Object,提高了可扩展性.

*/

public void destroyItem(ViewGroup container, int position, Object object) {

//super.destroyItem(container, position, object);此方法一定要删掉.

container.removeView((View) object);

}

 

6.为ViewPager设置页面切换监听器.并在onPageSelected里进行文本的设置(所有的 position : 条目的位置)

viewPager.addOnPageChangeListener(new OnPageChangeListener() {//也可以是setOnPageChangeListener,二者是一样的,只不过set被淘汰了

//Viewpager的页面pager切换完成时,执行该方法

public void onPageSelected(int position) {

Log.e("log","当页面改变时执行:onPageSelected");

    updateTitleAndDot()//记得在第4步,为ViewPager设置Adapter适配器下面,调用该方法,使ViewPager一创建,第一个页面就有文本数据

}

 

//ViewPager控件处于滑动中,执行该方法

参数信息  positionOffset:页面移动距离的百分比例     positionOffsetPixels : 移动的偏移的像素

注意:positionOffsetPixels,positionOffset:会随着页面向右滑动而不断增加(无限接近于1),但当完全滑动到另一页时,数据就变成了0.0

public void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {

Log.d("log","当页面处于滑动中时执行:onPageScrolled");

}

 

//当ViewPager控件被点击或松开时(也可以理解为pager滑动状态改变时),执行该方法

public void onPageScrollStateChanged(int state) {

Log.i("log","当页面时执行:onPageScrollstateChanged");

}

 }

);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值