真正实现Viewpage换页动画控制

近来用到了ViewPage做图片广告,但Viewpage的换页动画效果实在过于平庸,于是萌生了控制了VeiwPage换页动画的想法。

android的动画是相当丰富的,起初想到了用Animation来做,但是ViewPage提供的方法实在无法达到预期的效果,又尝试了重写ViewPage,使用Camera来对页面进行重画,但只能控制到单页,整体效果不达标,最后不得不放弃以上两种方式,当然,这里面能力的因素是客观存在的。

在网上百度了半天,不得不说现在的“拷贝党”成员广大,搜索了半天全是一模一样的,浪费精力不说,还一肚子火,做程序开发的都有同感,当一个问题久久不能解决,在希望和失望之间徘徊时,那种心境真是一种煎熬。

休息了一天,最后下狠心,直接把android官方的API拿来研究,最后在api中找到了方法:

ViewPage提供了一个内部接口PageTransformer,用于控制两页之间的切换控制,在PageTransformer中只有一个方法 public void transformPage(View view, float position),在这个方法中,可以实现对两个页面的完美控制。


public void transformPage(View view, float position)中很关键的是参数position,它是页面相对ViewPage中心位置的距离百分比,介于-1和1之间,进入者由-1向0变化,退出者由0向1变化,当页面的距离百分比为0时,界面被选中,即触发ViewPage的onPageSelected事件。

通过判定position的值,可以定位当前作用的页面是进入页面还是退出页面,并做出相应的业务逻辑,这里直接给出官方的例子供大家参考


public class DepthPageTransformer implements ViewPager.PageTransformer {     
private static float MIN_SCALE = 0.75f;      
public void transformPage(View view, float position) {         
int pageWidth = view.getWidth();          
if (position < -1) {        
  view.setAlpha(0);          
} else if (position <= 0) { 
 view.setAlpha(1);            
 view.setTranslationX(0);             
 view.setScaleX(1);             
 view.setScaleY(1);          
} else if (position <= 1) {    
   view.setAlpha(1 - position);              
   view.setTranslationX(pageWidth * -position);                         
   float scaleFactor = MIN_SCALE                     + (1 - MIN_SCALE) * (1 - Math.abs(position));             
view.setScaleX(scaleFactor);             
view.setScaleY(scaleFactor);          
} else { 
   view.setAlpha(0);         
}     
}
 }



最后直接调用ViewPage的 setPageTransformer() 方法设置创建的PageTransformer 实例即可

猜你喜欢

转载自yandaluohong.iteye.com/blog/1914726