Android ViewPager 的使用总结

Android ViewPager 的使用总结,第1张

概述在一个窗口里面添加tab便签,完成便签切换来实现页面的切换,这样的好处是可以在同一个窗口里面有多个页面,这些页面共享同一个窗口的资源,同使用多个窗口来实现这个功能来得更加流畅!!

在一个窗口里面添加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 的使用总结所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1148095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存