您的位置:首页 > 其它

ViewPager的基本用法

2015-11-25 00:14 218 查看
步骤:

1:在你的布局文件中写一个ViewPager用于存放带左右滑动显示的容器

2:创建另一个布局文件,用于复用装载每一个待显示的页面

3:将你要显示的多个界面放入一个集合中,这几个界面是复用的第二步的布局文件

4:定义一个Adapter继承PagerAdapter,供ViewPageradapter使用,adapter用于适配你要在ViewPager中显示的多个界面,因此你应该将你要显示的多个界面的集合传递给adapter,可以通过adapter的构造器传递list

5:定义一个监听实现OnPageChangeListener,用于当ViewPager的多个页面切换时的监听



<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main" tools:context=".MainActivity">
<!--1:写一个ViewPager用于存放带左右滑动显示的容器-->
<android.support.v4.view.ViewPager
android:id="@+id/guide_pages"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>




base_page.xml
<?xml version="1.0" encoding="utf-8"?>
<!--2:创建一个view,用于复用每一个待显示的view-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerInside"/>
</RelativeLayout>

/**
* 4:定义一个GuidePageAdapter,供ViewPager
* adapter的很重要,用于适配你要在ViewPager中显示的多个界面,因此你应该将你要显示的多个界面传递给adapter
* 这里通过adapter的构造器传递list
*/
public class GuidePageAdapter extends PagerAdapter {

private List<View> views;

public GuidePageAdapter(List<View> pageViews) {
this.views = pageViews;
}

@Override
public void destroyItem(View v, int position, Object arg2) {
((ViewPager) v).removeView(views.get(position));

}

@Override
public void finishUpdate(View arg0) {

}

@Override
public int getCount() {
return views.size();
}

@Override
public Object instantiateItem(View v, int position) {
((ViewPager) v).addView(views.get(position));
return views.get(position);
}

@Override
public boolean isViewFromObject(View v, Object arg1) {
return v == arg1;
}

@Override
public void startUpdate(View arg0) {

}

@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}

@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {

}

@Override
public Parcelable saveState() {
return null;
}
}


public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private List<View> views;//用于存放viewPager中待显示的view,这个view是自定义的一个布局guide_page.xml
private int res[]={R.drawable.guide1,R.drawable.guide2,R.drawable.guide3 , R.drawable.guide5 ,R.drawable.guide4 };//带显示的图片要分别放入guide_page.xml的iv中

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.guide_pages);
initShowingViews();
viewPager.setAdapter(new GuidePageAdapter(views));//将viewPager需要显示的list传递给adapter
viewPager.setOnPageChangeListener(new GuidePageChangeListener());
//        viewPager.setOnTouchListener(this);
}

/**
* 3:将你要显示的多个界面放入一个集合中
*/
private void initShowingViews() {
views = new ArrayList<View>();
for (int i=0;i<res.length;i++){
View view=View.inflate(this,R.layout.base_page,null);
ImageView iv= (ImageView) view.findViewById(R.id.image);
iv.setImageResource(res[i]);
views.add(view);
}
}

/**
* 5:定义一个OnPageChangeListener,用于当ViewPager的多个页面切换时的监听
*/
class GuidePageChangeListener implements ViewPager.OnPageChangeListener {

@Override
public void onPageScrollStateChanged(int arg0) {
Log.i("yin", "执行viewPager的onPageScrollStateChanged方法");
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
Log.i("yin","执行viewPager的onPageScrolled方法");
}

@Override
public void onPageSelected(int position) {
Log.i("yin","执行viewPager的onPageSelected方法");
}
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: