用ViewPager来切换页面
1.adapter适配器
众所周知,viewpager需要adapter适配器来填充页面
public class MyAdapter extends PagerAdapter {
List<View> views; //放页面的list
/**
* 构造方法
* @param views 要填充的view
*/
public MyAdapter(List<View> views) {
this.views = views;
}
//设置ViewPager有几个滑动页面
@Override
public int getCount() {
//用图片资源数组的length也可以,用图片容器的size也可以
return views.size();
}
//当前滑动到的ViewPager页面
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ViewPager vp = (ViewPager) container;
View v = views.get(position);
vp.addView(v);
return v;
}
//官方固定写法
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
//每次划出当前页面的时候就销毁
ViewPager vp = (ViewPager) container;
View v = views.get(position);
vp.removeView(v);
}
}
调用的时候,把自己的viewList参数传进去即可
MyAdapter adapter = new MyAdapter(viewsList);
viewPager.setAdapter(adapter);
我这里是隔一段时间自动切换页面,在handler里更新
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
int totalcount = viewsList.size();//autoChangeViewPager.getChildCount();
int currentItem = viewPager.getCurrentItem();
int toItem = currentItem + 1 == totalcount ? 0 : currentItem + 1;
viewPager.setCurrentItem(toItem, true);
//每隔time秒钟(time可以由客户端改变)发送一个message,用于切换viewPager中的view
this.sendEmptyMessageDelayed(1, time * 1000);
}
}
};
2.添加切换的动画效果
需要实现PageTransformer接口,重写transformPage方法,直接上代码,代码里有注释
//view pager 翻页3d动画效果
//每当viewpager上一个可见或依附的页面发生了滚动事件就会调用PageTransformer,
// 这让应用可以使用自定义transformation让viewpager某一个页面视图上实现某些特定的动画属性。
public class SimplePageTransform implements ViewPager.PageTransformer {
/**
*
* @param view 应用切换动画到哪一个页面上
* @param position 表示相对于当前页正中的位置,0表示在正中的这个页面,1表示右边一个完整的页面,-1表示左边一个完整的页面
*/
@Override
public void transformPage(View view, float position) {
int width = view.getWidth();
int pivotX = 0;
if (position <= 1 && position > 0) {// right scrolling
pivotX = 0;
} else if (position == 0) {
} else if (position < 0 && position >= -1) {// left scrolling
pivotX = width;
}
//设置x轴的锚点
view.setPivotX(pivotX);
//设置绕Y轴旋转的角度
view.setRotationY(90f * position);
}
}