博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ViewPager 入门一
阅读量:6968 次
发布时间:2019-06-27

本文共 6804 字,大约阅读时间需要 22 分钟。

使用ViewPager能够得到不同view的切换效果

例如以下图,实现了四个view间的相互滑动

一、新建项目,引入ViewPager控件

ViewPager。它是google SDk中自带的一个附加包的一个类,能够用来实现屏幕间的切换。

2、新建四个LinearLayout,用于滑动切换的视图

3加载代码段将视图加载Viewpager中

import android.R.id;import android.app.Activity;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.PagerTabStrip;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;public class MainActivity extends Activity {	ViewPager ViewPager = null;	public String TAG = "tag";	ArrayList
viewContainter = new ArrayList
(); ArrayList
titleContainer = new ArrayList
(); @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager = (ViewPager)findViewById(R.id.pager); View view1 = LayoutInflater.from(this).inflate(R.layout.tab1, null); View view2 = LayoutInflater.from(this).inflate(R.layout.tab2, null); View view3 = LayoutInflater.from(this).inflate(R.layout.tab3, null); View view4 = LayoutInflater.from(this).inflate(R.layout.tab4, null); //viewpager開始加入view viewContainter.add(view1); viewContainter.add(view2); viewContainter.add(view3); viewContainter.add(view4); ViewPager.setAdapter(new PagerAdapter() { //viewpager中的组件数量 @Override public int getCount() { return viewContainter.size(); } //滑动切换的时候销毁当前的组件 @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) container).removeView(viewContainter.get(position)); } //每次滑动的时候生成的组件 @Override public Object instantiateItem(ViewGroup container, int position) { ((ViewPager) container).addView(viewContainter.get(position)); return viewContainter.get(position); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public int getItemPosition(Object object) { return super.getItemPosition(object); } }); ViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}

代码具体解释

1.定义一个ViewPager的容器

ViewPager ViewPager = null;ArrayList
viewContainter = new ArrayList
();

2.初始化换View和ViewPager且加入到View的容器viewContainter中

View view1 = LayoutInflater.from(this).inflate(R.layout.tab1, null);        View view2 = LayoutInflater.from(this).inflate(R.layout.tab2, null);        View view3 = LayoutInflater.from(this).inflate(R.layout.tab3, null);        View view4 = LayoutInflater.from(this).inflate(R.layout.tab4, null);        //viewpager開始加入view        viewContainter.add(view1);        viewContainter.add(view2);        viewContainter.add(view3);        viewContainter.add(view4);

3.加入到PagerAdapter中而且设置监听

ViewPager.setAdapter(new PagerAdapter() {        	             //viewpager中的组件数量            @Override            public int getCount() {                return viewContainter.size();            }          //滑动切换的时候销毁当前的组件            @Override            public void destroyItem(ViewGroup container, int position,                    Object object) {                ((ViewPager) container).removeView(viewContainter.get(position));            }          //每次滑动的时候生成的组件            @Override            public Object instantiateItem(ViewGroup container, int position) {                ((ViewPager) container).addView(viewContainter.get(position));                return viewContainter.get(position);            }             @Override            public boolean isViewFromObject(View arg0, Object arg1) {                return arg0 == arg1;            }             @Override            public int getItemPosition(Object object) {                return super.getItemPosition(object);            }             @Override            public CharSequence getPageTitle(int position) {                return titleContainer.get(position);            }        });         ViewPager.setOnPageChangeListener(new OnPageChangeListener() {            @Override            public void onPageScrollStateChanged(int arg0) {            }             @Override            public void onPageScrolled(int arg0, float arg1, int arg2) {            }             @Override            public void onPageSelected(int arg0) {            }        });

PageAdapter 必须重写的四个函数:

  • boolean isViewFromObject(View arg0, Object arg1)
  • int getCount() 
  • void destroyItem(ViewGroup container, int position,Object object)
  • Object instantiateItem(ViewGroup container, int position)

先看看各个函数,我们上面都做了什么吧:

[java] 
  1. @Override  
  2. public int getCount() {  
  3.     // TODO Auto-generated method stub  
  4.     return viewList.size();  
  5. }  
getCount():返回要滑动的VIew的个数

[java] 
  1. @Override  
  2. public void destroyItem(ViewGroup container, int position,  
  3.         Object object) {  
  4.     // TODO Auto-generated method stub  
  5.     container.removeView(viewList.get(position));  
  6. }  
destroyItem():从当前container中删除指定位置(position)的View;

[java] 
  1. @Override  
  2. public Object instantiateItem(ViewGroup container, int position) {  
  3.     // TODO Auto-generated method stub  
  4.         container.addView(viewList.get(position));  
  5.           
  6.           
  7.         return viewList.get(position);  
  8.     }  
  9. };  
instantiateItem():做了两件事,第一:将当前视图加入到container中,第二:返回当前View

[java] 
  1. @Override  
  2. public boolean isViewFromObject(View arg0, Object arg1) {  
  3.     // TODO Auto-generated method stub  
  4.     return arg0 == arg1;  
  5. }  
isViewFromObject():对于这个函数就先不做解说,大家眼下先知道它要这样重写即可了
你可能感兴趣的文章
递归加法运算
查看>>
蓝桥杯 倍数问题(dfs,枚举组合数)
查看>>
蓝桥杯 穿越雷区(bfs)
查看>>
SQL FORMAT() 函数实例
查看>>
iTerm 使用expect实现自动远程登录,登录跳板机
查看>>
JavaScript 面试:什么是纯函数?
查看>>
linux终端下查Dict.cn/WebsterOnline/Etymonline.com
查看>>
Hadoop(Pig)统计IP地理位置
查看>>
疯狂的 JAVA 后++
查看>>
group of transformations
查看>>
Windows Service 学习笔记
查看>>
2016.11.17随笔
查看>>
MGR架构~单写模式架构的搭建
查看>>
DFS BestCoder Round #49 ($) 1001 Untitled
查看>>
Native App, Hybrid App, Web App对比
查看>>
P1168 中位数
查看>>
B4260 Codechef REBXOR
查看>>
在 S5PV210 的 开发板上 使用 串口 收发信息
查看>>
python学习交流 - 内置函数使用方法和应用举例
查看>>
oracle 恢复数据
查看>>