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 view 102 * @param offsetY the offset y 103 */ 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 @Override 116 public void onAnimationStart(Animation animation) { 117 } 118 119 @Override 120 public void onAnimationRepeat(Animation animation) { 121 } 122 123 @Override 124 public void onAnimationEnd(Animation animation) { 125 //两秒后再调 126 view.postDelayed(new Runnable(){ 127 128 @Override 129 public void run(){ 130 playJumpAnimation(view,offsetY); 131 } 132 }, 2000); 133 } 134 }); 135 136 view.startAnimation(animationSet); 137 } 138 139 /** 140 * 旋转动画 141 * @param v 142 * @param durationMillis 143 * @param repeatCount Animation.INFINITE 144 * @param repeatMode Animation.RESTART 145 */ 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.RESTART 157 rotateAnimation.setRepeatMode(repeatMode); 158 //动画插入器 159 rotateAnimation.setInterpolator(v.getContext(), android.R.anim.decelerate_interpolator); 160 //添加到AnimationSet 161 animationSet.addAnimation(rotateAnimation); 162 163 //开始动画 164 v.startAnimation(animationSet); 165 } 166 167 }