原标题:AndroidViewPager的使用总结
在一个窗口里面添加tab便签,完成便签切换来实现页面的切换,这样的好处是可以在同一个窗口里面有多个页面,这些页面共享同一个窗口的照片,同使用多个窗口来实现这个功能来得更加流畅!!
主要产生的类文件有activity,n个view,adapter,自定义的ViewPager,n+1个布局文件
demo所用到文件
步骤:
创建activity
packagecom.example.myviewpager; importjava.util.ArrayList; importjava.util.List; importandroid.app.Activity; importandroid.content.Context; importandroid.graphics.Color; importandroid.os.Bundle; importandroid.support.v4.view.ViewPager; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.TextView; /** *主窗口 *@authorcgx * */ publicclassMainActivityextendsActivityimplementsOnClickListener{ privateContextmContext; privateMyViewPagermPager;//页面内容 privateMyViewPagerAdapterpagerAdapter=null; privateTextViewt1,t2,t3;//页卡头标 privateList<View>pageList=newArrayList<View>(); privateView1mView1; privateView2mView2; privateView3mView3; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext=this; initViews(); initEvents(); initViewPager(); } privatevoidinitViews(){ //TODOAuto-generatedmethodstub t1=(TextView)findViewById(R.id.text1); t2=(TextView)findViewById(R.id.text2); t3=(TextView)findViewById(R.id.text3); mPager=(MyViewPager)findViewById(R.id.vPager); //设置ViewPager不允许滑动 //mPager.setCanScroll(false); //一开始进入窗口的时候,默认第一个便签被选中 t1.setBackgroundColor(Color.parseColor("#FFFF00")); t2.setBackgroundColor(Color.parseColor("#FFFFFF")); t3.setBackgroundColor(Color.parseColor("#FFFFFF")); } privatevoidinitEvents(){ //TODOAuto-generatedmethodstub t1.setOnClickListener(this); t2.setOnClickListener(this); t3.setOnClickListener(this); } privatevoidinitViewPager(){ //TODOAuto-generatedmethodstub pageList.clear(); if(mView1==null){ mView1=newView1(mContext); } if(mView2==null){ mView2=newView2(mContext); } if(mView3==null){ mView3=newView3(mContext); } pageList.add(mView1.getView()); pageList.add(mView2.getView()); pageList.add(mView3.getView()); pagerAdapter=newMyViewPagerAdapter(pageList); //缓存页面,如果想全部都缓存的话,参数等于页卡数减一,系统默认参数为1,保存两个 mPager.setOffscreenPageLimit(2); mPager.setAdapter(pagerAdapter); //设置Page改变监听器 mPager.setOnPageChangeListener(onPageChangeListener); } /** *SimpleOnPageChangeListener.该监听是当我们的viewpager页面切换的时候会触发在里面我们会去改变tab的聚焦情况 *。因为实现上viewpager与actionbar是独立的,需要我们手动同步。 */ ViewPager.SimpleOnPageChangeListeneronPageChangeListener=newViewPager.SimpleOnPageChangeListener(){ @Override publicvoidonPageSelected(intposition){ /** *setSelectedNavigationItem方法用于设置ActionBar的聚焦tab. *在接下来我们判断了SLidingMenu的手势力模式,如果ViewPager已经滑到了最左边,则我们把手势设置成全屏的, *这样更往左滑动的时候,就会打开Menu. */ initTab(position); } //初始化便签颜色 privatevoidinitTab(intposition){ //TODOAuto-generatedmethodstub if(position==0){ t1.setBackgroundColor(Color.parseColor("#FFFF00")); t2.setBackgroundColor(Color.parseColor("#FFFFFF")); t3.setBackgroundColor(Color.parseColor("#FFFFFF")); }elseif(position==1){ t1.setBackgroundColor(Color.parseColor("#FFFFFF")); t2.setBackgroundColor(Color.parseColor("#FFFF00")); t3.setBackgroundColor(Color.parseColor("#FFFFFF")); }else{ t1.setBackgroundColor(Color.parseColor("#FFFFFF")); t2.setBackgroundColor(Color.parseColor("#FFFFFF")); t3.setBackgroundColor(Color.parseColor("#FFFF00")); } } }; @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub switch(v.getId()){ caseR.id.text1://点击第一个便签 mPager.setCurrentItem(0,false); break; caseR.id.text2://点击第二个便签 mPager.setCurrentItem(1,false); break; caseR.id.text3://点击第三个便签 mPager.setCurrentItem(2,false); break; default: break; } } }
自定义MyViewPager
packagecom.example.myviewpager; importandroid.content.Context; importandroid.support.v4.view.ViewPager; importandroid.util.AttributeSet; importandroid.view.MotionEvent; /** *自定义滑动翻页可控,可通过设置isCanScroll参数来控制是否允许滑动切换页面 */ publicclassMyViewPagerextendsViewPager{ /**是否允许滑动翻页,默认可滑动*/ privatebooleanisCanScroll=true; publicMyViewPager(Contextcontext,AttributeSetattrs){ super(context,attrs); } publicMyViewPager(Contextcontext){ super(context); } publicbooleanisCanScroll(){ returnisCanScroll; } /**设置是否可以滑动翻页*/ publicvoidsetCanScroll(booleanisCanScroll){ this.isCanScroll=isCanScroll; } @Override publicvoidscrollTo(intx,inty){ super.scrollTo(x,y); } //设置禁止滑动的关键 @Override publicbooleanonTouchEvent(MotionEventarg0){ if(!isCanScroll) returntrue; returnsuper.onTouchEvent(arg0); } @Override publicbooleanonInterceptTouchEvent(MotionEventarg0){ returnsuper.onInterceptTouchEvent(arg0); } @Override publicvoidsetCurrentItem(intitem,booleansmoothScroll){ super.setCurrentItem(item,smoothScroll); } @Override publicvoidsetCurrentItem(intitem){ super.setCurrentItem(item); } }
适配器:
packagecom.example.myviewpager; importjava.util.List; importandroid.support.v4.view.PagerAdapter; importandroid.view.View; importandroid.view.ViewGroup; /** *viewpager适配器 **/ publicclassMyViewPagerAdapterextendsPagerAdapter{ privateList<View>mListViews; publicMyViewPagerAdapter(List<View>mListViews){ this.mListViews=mListViews;//构造方法,参数是我们的页卡,这样比较方便 } @Override publicvoiddestroyItem(ViewGroupcontainer,intposition,Objectobject){ container.removeView(mListViews.get(position));//删除页卡 } @Override publicObjectinstantiateItem(ViewGroupcontainer,intposition){//这个方法用来实例化页卡 container.addView(mListViews.get(position),0);//添加页卡 returnmListViews.get(position); } @Override publicintgetCount(){ returnmListViews.size();//返回页卡的数目 } @Override publicbooleanisViewFromObject(Viewarg0,Objectarg1){ returnarg0==arg1;//官方提示这样写 } }
第一个view
packagecom.example.myviewpager; importandroid.content.Context; importandroid.view.LayoutInflater; importandroid.view.View; /** *第一个 *@authorcgx * */ publicclassView1{ privateContextmContext; privateViewrootView; publicView1(ContextmContext){ //TODOAuto-generatedconstructorstub this.mContext=mContext; //加载布局 rootView=LayoutInflater.from(mContext).inflate( R.layout.view1_layout,null); } publicViewgetView(){ returnrootView; } }
activity布局文件
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#FFFFFF"> <TextView android:id="@+id/text1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="center" android:text="页卡1" android:textColor="#000000" android:textSize="20sp"/> <TextView android:id="@+id/text2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="center" android:text="页卡2" android:textColor="#000000" android:textSize="20sp"/> <TextView android:id="@+id/text3" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="center" android:text="页卡3" android:textColor="#000000" android:textSize="20sp"/> </LinearLayout> <com.example.myviewpager.MyViewPager android:id="@+id/vPager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1.0" android:background="#000000" android:flipInterval="30" /> </LinearLayout>
View1的布局
<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#123456"> </LinearLayout>
由于用于演示,所以view的布局只是用不同的背景色来区分,开发中具体要展示的布局可以直接在view的布局文件里面改。demo中的view都是参考第一个来写的,类似
总结
实际开发中,虽然官方提供了很多api,真正等到要自己用的时候,还是自己在依照习惯再包装一层,成为自己的工具,这样以后就可以直接用了,上面的例子是我在实习期间总结的,鄙陋之处敬请原谅,也欢迎大家指出,一起学习(^_^)
代码链接:http://pan.baidu.com/s/1pJAF6Gz
相关:
胡歌领衔主演的几部电视剧正在各大卫视热播中,霸屏小王子胡歌通过多部巨作以及在近期热播剧《大好
下班约,是广州爱圈信息科技有限公司致力研发的一款工友社交App,为广大工友们提供一个
洗厕所、洗碗、罚站——这都是小时候不听话被家长惩罚的措施吧?没想到,读了大学当上了白领,却还是要在公司
坐姿一:踞,伸开腿坐古人认真礼貌,即使独处,仍得谨慎。有一天,孟子要休妻,孟母问其故,曰:踞。意思是
27 种语言过程型编程语言: C, Rust, Cython面向对象数据建模语言: Java, C#, EiffelC 的面向对象衍生语言:
动态加载技术(也叫插件化技术)在技术驱动型的公司中扮演着相当重要的角色,当项目越来越庞大的时候,需要
近日,一名有超过15年软件开发经验的软件开发人员在Hacker News上提出了一个问题:如何才能成为一个好
简而言之,问题的答案是这样的:人的听觉,感受到的就是声音的频谱,而 do+mi 的频谱与 re 的频谱完全不同。
从心理学的角度,喜欢跟自己长得像的人(所谓的夫妻相)是非常科学也非常正常的!再放宽一点说呢,人际交往
这世间,能让霍建华一秒变小公主的,只有胡歌了!!整个画风都变了!尊上你这么娇羞真的好吗?!看到这里,