首页 > 代码库 > 动画工具类

动画工具类

  1 public class AbAnimationUtil {  2       3     /** 定义动画的时间. */  4     public final static long aniDurationMillis = 1L;  5   6     /**  7      * 用来改变当前选中区域的放大动画效果  8      * 从1.0f放大1.2f倍数  9      * 10      * @param view the view 11      * @param scale the scale 12      */ 13     public static void largerView(View view, float scale) { 14         if (view == null) 15             return; 16  17         // 置于所有view最上层 18         view.bringToFront(); 19         int width = view.getWidth(); 20         float animationSize = 1 + scale / width; 21         scaleView(view, animationSize); 22     } 23  24     /** 25      * 用来还原当前选中区域的还原动画效果. 26      * 27      * @param view the view 28      * @param scale the scale 29      */ 30     public static void restoreLargerView(View view, float scale) { 31         if (view == null) 32             return; 33         int width = view.getWidth(); 34         float toSize = 1 + scale / width; 35         // 从1.2f缩小1.0f倍数 36         scaleView(view, -1 * toSize); 37     } 38  39     /** 40      * 缩放View的显示. 41      * 42      * @param view 需要改变的View 43      * @param toSize 缩放的大小,其中正值代表放大,负值代表缩小,数值代表缩放的倍数 44      */ 45     private static void scaleView(final View view, float toSize) { 46         ScaleAnimation scale = null; 47         if (toSize == 0) { 48             return; 49         } else if (toSize > 0) { 50             scale = new ScaleAnimation(1.0f, toSize, 1.0f, toSize, 51                     Animation.RELATIVE_TO_SELF, 0.5f, 52                     Animation.RELATIVE_TO_SELF, 0.5f); 53         } else { 54             scale = new ScaleAnimation(toSize * (-1), 1.0f, toSize * (-1), 55                     1.0f, Animation.RELATIVE_TO_SELF, 0.5f, 56                     Animation.RELATIVE_TO_SELF, 0.5f); 57         } 58         scale.setDuration(aniDurationMillis); 59         scale.setInterpolator(new AccelerateDecelerateInterpolator()); 60         scale.setFillAfter(true); 61         view.startAnimation(scale); 62     } 63      64     /** 65      * 跳动-跳起动画. 66      * 67      * @param view the view 68      * @param offsetY the offset y 69      */ 70     private void playJumpAnimation(final View view,final float offsetY) { 71         float originalY = 0; 72         float finalY = - offsetY; 73         AnimationSet animationSet = new AnimationSet(true); 74         animationSet.addAnimation(new TranslateAnimation(0, 0, originalY,finalY)); 75         animationSet.setDuration(300); 76         animationSet.setInterpolator(new AccelerateDecelerateInterpolator()); 77         animationSet.setFillAfter(true); 78  79         animationSet.setAnimationListener(new AnimationListener() { 80  81             @Override 82             public void onAnimationStart(Animation animation) { 83             } 84  85             @Override 86             public void onAnimationRepeat(Animation animation) { 87             } 88  89             @Override 90             public void onAnimationEnd(Animation animation) { 91                 playLandAnimation(view,offsetY); 92             } 93         }); 94  95         view.startAnimation(animationSet); 96     } 97  98     /** 99      * 跳动-落下动画.100      *101      * @param view the view102      * @param offsetY the offset y103      */104     private void playLandAnimation(final View view,final float offsetY) {105         float originalY =  - offsetY;106         float finalY = 0;107         AnimationSet animationSet = new AnimationSet(true);108         animationSet.addAnimation(new TranslateAnimation(0, 0, originalY,finalY));109         animationSet.setDuration(200);110         animationSet.setInterpolator(new AccelerateInterpolator());111         animationSet.setFillAfter(true);112 113         animationSet.setAnimationListener(new AnimationListener() {114 115             @Override116             public void onAnimationStart(Animation animation) {117             }118 119             @Override120             public void onAnimationRepeat(Animation animation) {121             }122 123             @Override124             public void onAnimationEnd(Animation animation) {125                 //两秒后再调126                 view.postDelayed(new Runnable(){127                     128                     @Override129                     public void run(){130                         playJumpAnimation(view,offsetY);131                     }132                 }, 2000);133             }134         });135 136         view.startAnimation(animationSet);137     }138     139     /**140      * 旋转动画141      * @param v142      * @param durationMillis143      * @param repeatCount  Animation.INFINITE144      * @param repeatMode  Animation.RESTART145      */146     public static void playRotateAnimation(View v,long durationMillis,int repeatCount,int repeatMode) {147         148         //创建AnimationSet对象149         AnimationSet animationSet = new AnimationSet(true);150         //创建RotateAnimation对象151         RotateAnimation rotateAnimation = new RotateAnimation(0f,+360f, 152                     Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);153         //设置动画持续154         rotateAnimation.setDuration(durationMillis);155         rotateAnimation.setRepeatCount(repeatCount);156         //Animation.RESTART157         rotateAnimation.setRepeatMode(repeatMode);158         //动画插入器159         rotateAnimation.setInterpolator(v.getContext(), android.R.anim.decelerate_interpolator);160         //添加到AnimationSet161         animationSet.addAnimation(rotateAnimation);162         163         //开始动画 164         v.startAnimation(animationSet);165     }166 167 }

 

动画工具类