使用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"; ArrayListviewContainter = 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;ArrayListviewContainter = 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)
先看看各个函数,我们上面都做了什么吧:
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return viewList.size();
- }
- @Override
- public void destroyItem(ViewGroup container, int position,
- Object object) {
- // TODO Auto-generated method stub
- container.removeView(viewList.get(position));
- }
- @Override
- public Object instantiateItem(ViewGroup container, int position) {
- // TODO Auto-generated method stub
- container.addView(viewList.get(position));
- return viewList.get(position);
- }
- };
- @Override
- public boolean isViewFromObject(View arg0, Object arg1) {
- // TODO Auto-generated method stub
- return arg0 == arg1;
- }