在一个窗口里面添加tab便签,完成便签切换来实现页面的切换,这样的好处是可以在同一个窗口里面有多个页面,这些页面共享同一个窗口的资源,同使用多个窗口来实现这个功能来得更加流畅!!
主要产生的类文件有activity,n个vIEw,adapter,自定义的VIEwPager,n+1个布局文件
demo所用到文件
步骤:
创建activity
package com.example.myvIEwpager;import java.util.ArrayList;import java.util.List;import androID.app.Activity;import androID.content.Context;import androID.graphics.@R_404_6004@;import androID.os.Bundle;import androID.support.v4.vIEw.VIEwPager;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.TextVIEw;/** * 主窗口 * @author cgx * */public class MainActivity extends Activity implements OnClickListener { private Context mContext; private MyVIEwPager mPager;// 页面内容 private MyVIEwPagerAdapter pagerAdapter = null; private TextVIEw t1,t2,t3;// 页卡头标 private List<VIEw> Pagelist = new ArrayList<VIEw>(); private VIEw1 mVIEw1; private VIEw2 mVIEw2; private VIEw3 mVIEw3; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); mContext = this; initVIEws(); initEvents(); initVIEwPager(); } private voID initVIEws() { // Todo @R_502_6843@-generated method stub 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.setBackground@R_404_6004@(@R_404_6004@.parse@R_404_6004@("#FFFF00")); t2.setBackground@R_404_6004@(@R_404_6004@.parse@R_404_6004@("#FFFFFF")); t3.setBackground@R_404_6004@(@R_404_6004@.parse@R_404_6004@("#FFFFFF")); } private voID initEvents() { // Todo @R_502_6843@-generated method stub t1.setonClickListener(this); t2.setonClickListener(this); t3.setonClickListener(this); } private voID initVIEwPager() { // Todo @R_502_6843@-generated method stub Pagelist.clear(); if (mVIEw1 == null) { mVIEw1 = new VIEw1(mContext); } if (mVIEw2 == null) { mVIEw2 = new VIEw2(mContext); } if (mVIEw3 == null) { mVIEw3 = new VIEw3(mContext); } Pagelist.add(mVIEw1.getVIEw()); Pagelist.add(mVIEw2.getVIEw()); Pagelist.add(mVIEw3.getVIEw()); pagerAdapter = new MyVIEwPagerAdapter(Pagelist); // 缓存页面,如果想全部都缓存的话,参数等于页卡数减一,系统默认参数为1,保存两个 mPager.setoffscreenPagelimit(2); mPager.setAdapter(pagerAdapter); // 设置Page改变监听器 mPager.setonPagechangelistener(onPagechangelistener); } /** * SimpleOnPagechangelistener.该监听是当我们的vIEwpager页面切换的时候会触发 在里面我们会去改变 tab的聚焦情况 * 。 因为实现上vIEwpager与actionbar是独立的,需要我们手动同步 。 */ VIEwPager.SimpleOnPagechangelistener onPagechangelistener = new VIEwPager.SimpleOnPagechangelistener() { @OverrIDe public voID onPageSelected(int position) { /** * setSelectednavigationItem 方法用于设置Actionbar的聚焦tab . * 在接下来我们判断了SLIDingMenu的手势力模式, 如果VIEwPager已经滑到了最左边,则我们把手势设置成全屏的, * 这样更往左滑动的时候,就会打开Menu . */ initTab(position); } // 初始化便签颜色 private voID initTab(int position) { // Todo @R_502_6843@-generated method stub if (position == 0) { t1.setBackground@R_404_6004@(@R_404_6004@.parse@R_404_6004@("#FFFF00")); t2.setBackground@R_404_6004@(@R_404_6004@.parse@R_404_6004@("#FFFFFF")); t3.setBackground@R_404_6004@(@R_404_6004@.parse@R_404_6004@("#FFFFFF")); } else if (position == 1) { t1.setBackground@R_404_6004@(@R_404_6004@.parse@R_404_6004@("#FFFFFF")); t2.setBackground@R_404_6004@(@R_404_6004@.parse@R_404_6004@("#FFFF00")); t3.setBackground@R_404_6004@(@R_404_6004@.parse@R_404_6004@("#FFFFFF")); } else { t1.setBackground@R_404_6004@(@R_404_6004@.parse@R_404_6004@("#FFFFFF")); t2.setBackground@R_404_6004@(@R_404_6004@.parse@R_404_6004@("#FFFFFF")); t3.setBackground@R_404_6004@(@R_404_6004@.parse@R_404_6004@("#FFFF00")); } } }; @OverrIDe public voID onClick(VIEw v) { // Todo @R_502_6843@-generated method stub switch (v.getID()) { case R.ID.text1:// 点击第一个便签 mPager.setCurrentItem(0,false); break; case R.ID.text2:// 点击第二个便签 mPager.setCurrentItem(1,false); break; case R.ID.text3:// 点击第三个便签 mPager.setCurrentItem(2,false); break; default: break; } }}
自定义MyVIEwPager
package com.example.myvIEwpager;import androID.content.Context;import androID.support.v4.vIEw.VIEwPager;import androID.util.AttributeSet;import androID.vIEw.MotionEvent;/** * 自定义滑动翻页可控,可通过设置isCanScroll参数来控制是否允许滑动切换页面 */public class MyVIEwPager extends VIEwPager { /** 是否允许滑动翻页,默认可滑动*/ private boolean isCanScroll = true; public MyVIEwPager(Context context,AttributeSet attrs) { super(context,attrs); } public MyVIEwPager(Context context) { super(context); } public boolean isCanScroll() { return isCanScroll; } /** 设置是否可以滑动翻页 */ public voID setCanScroll(boolean isCanScroll) { this.isCanScroll = isCanScroll; } @OverrIDe public voID scrollTo(int x,int y) { super.scrollTo(x,y); } // 设置禁止滑动的关键 @OverrIDe public boolean ontouchEvent(MotionEvent arg0) { if (!isCanScroll) return true; return super.ontouchEvent(arg0); } @OverrIDe public boolean onIntercepttouchEvent(MotionEvent arg0) { return super.onIntercepttouchEvent(arg0); } @OverrIDe public voID setCurrentItem(int item,boolean smoothScroll) { super.setCurrentItem(item,smoothScroll); } @OverrIDe public voID setCurrentItem(int item) { super.setCurrentItem(item); }}
适配器:
package com.example.myvIEwpager;import java.util.List;import androID.support.v4.vIEw.PagerAdapter;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;/** * vIEwpager适配器 * */public class MyVIEwPagerAdapter extends PagerAdapter{ private List<VIEw> mListVIEws; public MyVIEwPagerAdapter(List<VIEw> mListVIEws) { this.mListVIEws = mListVIEws;//构造方法,参数是我们的页卡,这样比较方便 } @OverrIDe public voID destroyItem(VIEwGroup container,int position,Object object) { container.removeVIEw(mListVIEws.get(position));//删除页卡 } @OverrIDe public Object instantiateItem(VIEwGroup container,int position) { //这个方法用来实例化页卡 container.addVIEw(mListVIEws.get(position),0);//添加页卡 return mListVIEws.get(position); } @OverrIDe public int getCount() { return mListVIEws.size();//返回页卡的数目 } @OverrIDe public boolean isVIEwFromObject(VIEw arg0,Object arg1) { return arg0==arg1;//官方提示这样写 }}
第一个vIEw
package com.example.myvIEwpager;import androID.content.Context;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;/** * 第一个 * @author cgx * */public class VIEw1 { private Context mContext; private VIEw rootVIEw; public VIEw1(Context mContext) { // Todo @R_502_6843@-generated constructor stub this.mContext=mContext; //加载布局 rootVIEw = LayoutInflater.from(mContext).inflate( R.layout.vIEw1_layout,null); } public VIEw getVIEw(){ return rootVIEw; } }
activity布局文件
<linearLayout xmlns: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:text@R_404_6004@="#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:text@R_404_6004@="#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:text@R_404_6004@="#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的布局
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns: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
以上就是对AndroID VIEwPager 的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!
总结以上是内存溢出为你收集整理的Android ViewPager 的使用总结全部内容,希望文章能够帮你解决Android ViewPager 的使用总结所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)