public class AnimViewWrapper<T extends View> {
T mTarget;
public static final int DIRECTION_TOP = 0x01;
public static final int DIRECTION_BOTTOM = 0x02;
public static final int DIRECTION_LEFT = 0x3;
public static final int DIRECTION_RIGHT = 0x4;
@IntDef({DIRECTION_TOP, DIRECTION_BOTTOM, DIRECTION_LEFT, DIRECTION_RIGHT})
public @interface SlideAnim {
}
public AnimViewWrapper(T mTarget) {
this.mTarget = mTarget;
}
/**
* 滑动进入
*/
public void slideIn(@SlideAnim int sileAnim, int duration, int delay) {
if (mTarget == null) {
return;
}
// 开始之前先取消当前的动画
ViewPropertyAnimator animator = mTarget.animate();
animator.cancel();
mTarget.setAlpha(0F);
animator.alpha(1F);
switch (sileAnim) {
case DIRECTION_TOP:
mTarget.setTranslationY(-100);
animator.translationY(0);
break;
case DIRECTION_BOTTOM:
mTarget.setTranslationY(100);
animator.translationY(0);
break;
case DIRECTION_RIGHT:
mTarget.setTranslationX(500);
animator.translationX(0);
break;
case DIRECTION_LEFT:
default:
mTarget.setTranslationX(-500);
animator.translationX(0);
break;
}
animator.setDuration(duration).setStartDelay(delay);
animator.start();
}
/**
* 消失动画
*/
public void alphaOut(int duration) {
if (mTarget == null) {
return;
}
mTarget.setAlpha(1F);
mTarget.setTranslationX(0);
mTarget.setTranslationY(0);
ViewPropertyAnimator animator = mTarget.animate();
animator.cancel();
animator.alpha(0).setDuration(duration).start();
}
/**
* 左侧进入
*/
public void sileFromLeft(int duration, int delay) {
slideIn(DIRECTION_LEFT, duration, delay);
}
/**
* 右侧进入
*/
public void slideFromRight(int duration, int delay) {
slideIn(DIRECTION_RIGHT, duration, delay);
}
/**
* 从底部进入
*/
public void slideFromBottom(int duration, int delay) {
slideIn(DIRECTION_TOP, duration, delay);
}
public void slideFromTop(int duration, int delay) {
slideIn(DIRECTION_BOTTOM, duration, delay);
}
public T getView() {
return mTarget;
}
}
今天想对一大堆view做动画,感觉特别麻烦,在想能不能写得通用一点,于是就用这种方式简单包装了一下