ViewPager花式切换效果

一、关于ViewPager

Viewpager作为一个经常使用的控件,相信大家都使用过。今天我们要给这个控件加上各样的切换效果。

二、效果一

无图无真相,先上图

这是viewpager的一个3D动画效果,其实实现它没有多么复杂,只需要运用v4包中PageTransformer类即可实现,这个类提供了一个方法transformpage,这个方法给我们了俩参数,一个是viewpager当前页面的视图,一个是该视图运动的百分比,通过这俩参数我们可以可以自定义容器中的view移动,比如说上图效果。
@Override
	public void transformPage(View view, float position) {
		if(position<1&&position>-1){
			//效果1
			view.setScaleX(1-Math.abs(position));
			view.setScaleY(1-Math.abs(position));


		}
	}
对的就是这么简单,再来一个效果

三、效果二


这个效果是移动时缩放了一定的大小,代码如下:
view.setScaleX(Math.max(0.9f,1-Math.abs(position)));
view.setScaleY(Math.max(0.9f,1-Math.abs(position)));

四、来个更炫的效果,3D翻转


这个效果看着很炫丽,其实看到这种效果我们第一时间想的应该是变复杂为简单,将复杂的动画拆分,上述动画可以拆分为俩动画:
1、页面缩小动画
2、页面转动动画
好了上代码:
view.setPivotX(position<0f?view.getWidth():0f);//左边页面:0~-1;右边的页面:1~0
view.setPivotY(view.getHeight()*0.5f);
view.setRotationY(position*45f);//0~90度

五、组件抖动效果


每个小组件都附加了一个位移动画,给每个子控件加一个随机的位移效果,代码如下:
	@Override
	public void transformPage(View view, float position) {
		if(position<1&&position>-1) {
			//找到里面的子控件
			ViewGroup v = (ViewGroup) view.findViewById(R.id.rl);
			int childCount = v.getChildCount();
			for (int i = 0; i < childCount; i++) {
				View childView = v.getChildAt(i);
				float factor = (float) Math.random() * 3;
				if (childView.getTag() == null) {
					childView.setTag(factor);
				} else {
					factor = (float) childView.getTag();
				}
				/**每一个子控件达到不同的视差效果,translationX是不一样的
				 * position : 0 ~ -1
				 * translationX: 0 ~ childView.getWidth();
				 */
				childView.setTranslationX(factor * childView.getWidth() * position);
			}

		}
	}

六、3D内翻转效果

不解释了,直接上代码相信大家懂得,跟上面3D翻转效果原理类似:
view.setPivotX(position<0f?view.getWidth():0f);//左边页面:0~-1;右边的页面:1~0
view.setPivotY(view.getHeight()*0.5f);
view.setRotationY(-position*45f);//0~90度

view.setPivotX(view.getWidth()*0.5f);//左边页面:0~-1;右边的页面:1~0
view.setPivotY(view.getHeight()*0.5f);
view.setRotationY(-position*45f);//0~90度

七、源码
根据相同的原理我们可以实现更多的效果,这几个效果代码已上传到github下边是链接:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值