一、ViewPager的作用
ViewPager 是一个左右滑动切换的视图,主要有两个用途,一是欢迎导航介绍界面的设计,二是新闻等的主界面的设计。
二、基本使用:
制作一个欢迎的导航页面,有3个页面可以切换,最后一页可以button点击进入主界面。
1,ViewPager 同其他控件一样,
在xml中定义:
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</android.support.v4.view.ViewPager>
在GuideActivity.java 中:
private ViewPager vp;
vp = (ViewPager) findViewById(R.id.vp);
2, vp同listview一样,需要一个适配器为其提供资源,适配器需要一个List<View>:
private MyViewPagerAdapter viewPagerAdapter ;private List < View > viewlist ;MyviewPagerAdapter.class:public class MyViewPagerAdapter extends PagerAdapter{ private List<View> list; private Context context; public MyViewPagerAdapter(List<View> list,Context context) { this.list=list; this.context=context; } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0==arg1; } @Override public Object instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub container.addView(list.get(position)); return list.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(list.get(position)); } }viewlist:由三个空的.xml填充(其一):<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="#ff00ff00" > </LinearLayout>然后是:LayoutInflater layoutInflater = getLayoutInflater(); view1 = layoutInflater.inflate(R.layout.one, null); view2 = layoutInflater.inflate(R.layout.two, null); view3 = layoutInflater.inflate(R.layout.three, null); viewlist = new ArrayList<View>(); viewlist.add(view1); viewlist.add(view2); viewlist.add(view3);最后是new adapter:viewPagerAdapter = new MyViewPagerAdapter(viewlist, this); vp.setAdapter(viewPagerAdapter);这样就实现基本用法。三、基础扩展-随动圆点:在xml中添加 :<LinearLayout android:id="@+id/ll" android:layout_width="fill_parent" android:layout_height="20dp" android:layout_alignParentBottom="true" android:gravity="center_horizontal" android:layout_marginBottom="20dp" android:orientation="horizontal" > <ImageView android:id="@+id/im1" android:layout_width="20dp" android:layout_height="20dp" android:src="@drawable/redstar" /> <ImageView android:id="@+id/im2" android:layout_width="20dp" android:layout_height="20dp" android:src="@drawable/greenstar" /> <ImageView android:id="@+id/im3" android:layout_width="20dp" android:layout_height="20dp" android:src="@drawable/greenstar" /> </LinearLayout>作为圆点的试图。.java 中的初始化圆点:private ImageView[] dots; private int[] ids = { R.id.im1, R.id.im2, R.id.im3 };private void initDots() { dots = new ImageView[viewlist.size()]; for (int i = 0; i < viewlist.size(); i++) { dots[i] = (ImageView) findViewById(ids[i]); } }用onPageChangeListener 实现随动效果:vp.setOnPageChangeListener(this);onPageChangeListener需要实现几个方法:@Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub }@Override public void onPageSelected(int arg0) { for (int i = 0; i < ids.length; i++) { if (arg0 == i) { dots[i].setImageResource(R.drawable.redstar); } else { dots[i].setImageResource(R.drawable.greenstar); } } }前两个是滑动时的事件方法,最后一个是滑动结束后的方法,arg0是结束后的页面。这样就实现了圆点随动。四、基础扩展-viewpager随动条基本学习的是这位博主的代码:http://blog.csdn.net/harvic880925/article/details/38557517其中用到的是 matrix,移动animation。写的很好。我自己实现的时候, one 和two的初始化得放在 onPageSelected中,不然值始终是0