AndroidViewAnimations开源框架实现
2015-07-27 14:48
543 查看
1.这是一个开源的动画库,首先感谢作者的分享。
BaseViewAnimator.class
这个是所有动画对象的基类,主要用来设置动画的属性。
Techniques.class
这个类是个枚举类,枚举出了所有实现了得对话对象:
YoYo.class
这个类采用了链式api的方式:
通过静态方法将动画对象传入:
animator.animate();是调用如下方法:
BaseViewAnimator.class
这个是所有动画对象的基类,主要用来设置动画的属性。
public abstract class BaseViewAnimator { public static final long DURATION = 1000; private AnimatorSet mAnimatorSet;// 存放动画对象的集合 private long mDuration = DURATION;// 默认的持续时间 { mAnimatorSet = new AnimatorSet(); } /** * 子类中需要实现的方法 * * @param target */ protected abstract void prepare(View target); /** * 设置目标view * * @param target * @return */ public BaseViewAnimator setTarget(View target) { reset(target); prepare(target); return this; } /** * 开始动画 */ public void animate() { start(); } /** * 开始动画 */ public void start() { mAnimatorSet.setDuration(mDuration); mAnimatorSet.start(); } /** * 重置view上面的状态 * * @param target */ public void reset(View target) { ViewHelper.setAlpha(target, 1); ViewHelper.setScaleX(target, 1); ViewHelper.setScaleY(target, 1); ViewHelper.setTranslationX(target, 0); ViewHelper.setTranslationY(target, 0); ViewHelper.setRotation(target, 0); ViewHelper.setRotationY(target, 0); ViewHelper.setRotationX(target, 0); ViewHelper.setPivotX(target, target.getMeasuredWidth() / 2.0f); ViewHelper.setPivotY(target, target.getMeasuredHeight() / 2.0f); } /** * 设置延续时间 * * @param duration * @return */ public BaseViewAnimator setDuration(long duration) { mDuration = duration; return this; } /** * 设置开始的延迟时间 * * @param delay * @return */ public BaseViewAnimator setStartDelay(long delay) { getAnimatorAgent().setStartDelay(delay); return this; } public long getStartDelay() { return mAnimatorSet.getStartDelay(); } /** * 添加监听器 * * @param l * @return */ public BaseViewAnimator addAnimatorListener(AnimatorListener l) { mAnimatorSet.addListener(l); return this; } public void cancel() { mAnimatorSet.cancel(); } public boolean isRunning() { return mAnimatorSet.isRunning(); } public boolean isStarted() { return mAnimatorSet.isStarted(); } public void removeAnimatorListener(AnimatorListener l) { mAnimatorSet.removeListener(l); } public void removeAllListener() { mAnimatorSet.removeAllListeners(); } /** * 设置间插器 * * @param interpolator * @return */ public BaseViewAnimator setInterpolator(Interpolator interpolator) { mAnimatorSet.setInterpolator(interpolator); return this; } public long getDuration() { return mDuration; } /** * 获得动画对象存放的集合 * * @return */ public AnimatorSet getAnimatorAgent() { return mAnimatorSet; } }
Techniques.class
这个类是个枚举类,枚举出了所有实现了得对话对象:
public enum Techniques { DropOut(DropOutAnimator.class), Landing(LandingAnimator.class), TakingOff(TakingOffAnimator.class), Flash(FlashAnimator.class), Pulse(PulseAnimator.class), RubberBand(RubberBandAnimator.class), Shake(ShakeAnimator.class), Swing(SwingAnimator.class), Wobble(WobbleAnimator.class), Bounce(BounceAnimator.class), Tada(TadaAnimator.class), StandUp(StandUpAnimator.class), Wave(WaveAnimator.class), Hinge(HingeAnimator.class), RollIn(RollInAnimator.class), RollOut(RollOutAnimator.class), BounceIn(BounceInAnimator.class), BounceInDown(BounceInDownAnimator.class), BounceInLeft(BounceInLeftAnimator.class), BounceInRight(BounceInRightAnimator.class), BounceInUp(BounceInUpAnimator.class), FadeIn(FadeInAnimator.class), FadeInUp(FadeInUpAnimator.class), FadeInDown(FadeInDownAnimator.class), FadeInLeft(FadeInLeftAnimator.class), FadeInRight(FadeInRightAnimator.class), FadeOut(FadeOutAnimator.class), FadeOutDown(FadeOutDownAnimator.class), FadeOutLeft(FadeOutLeftAnimator.class), FadeOutRight(FadeOutRightAnimator.class), FadeOutUp(FadeOutUpAnimator.class), FlipInX(FlipInXAnimator.class), FlipOutX(FlipOutXAnimator.class), FlipOutY(FlipOutYAnimator.class), RotateIn(RotateInAnimator.class), RotateInDownLeft(RotateInDownLeftAnimator.class), RotateInDownRight(RotateInDownRightAnimator.class), RotateInUpLeft(RotateInUpLeftAnimator.class), RotateInUpRight(RotateInUpRightAnimator.class), RotateOut(RotateOutAnimator.class), RotateOutDownLeft(RotateOutDownLeftAnimator.class), RotateOutDownRight(RotateOutDownRightAnimator.class), RotateOutUpLeft(RotateOutUpLeftAnimator.class), RotateOutUpRight(RotateOutUpRightAnimator.class), SlideInLeft(SlideInLeftAnimator.class), SlideInRight(SlideInRightAnimator.class), SlideInUp(SlideInUpAnimator.class), SlideInDown(SlideInDownAnimator.class), SlideOutLeft(SlideOutLeftAnimator.class), SlideOutRight(SlideOutRightAnimator.class), SlideOutUp(SlideOutUpAnimator.class), SlideOutDown(SlideOutDownAnimator.class), ZoomIn(ZoomInAnimator.class), ZoomInDown(ZoomInDownAnimator.class), ZoomInLeft(ZoomInLeftAnimator.class), ZoomInRight(ZoomInRightAnimator.class), ZoomInUp(ZoomInUpAnimator.class), ZoomOut(ZoomOutAnimator.class), ZoomOutDown(ZoomOutDownAnimator.class), ZoomOutLeft(ZoomOutLeftAnimator.class), ZoomOutRight(ZoomOutRightAnimator.class), ZoomOutUp(ZoomOutUpAnimator.class); private Class animatorClazz; private Techniques(Class clazz) { animatorClazz = clazz; } public BaseViewAnimator getAnimator() { try { return (BaseViewAnimator) animatorClazz.newInstance(); } catch (Exception e) { throw new Error("Can not init animatorClazz instance"); } } }
YoYo.class
这个类采用了链式api的方式:
通过静态方法将动画对象传入:
public static AnimationComposer with(Techniques techniques) { return new AnimationComposer(techniques); } public static AnimationComposer with(BaseViewAnimator animator) { return new AnimationComposer(animator); }内部类 AnimationComposer.class就相当于一个builder构造器,用来设置各种属性:
public static final class AnimationComposer { private List<Animator.AnimatorListener> callbacks = new ArrayList<Animator.AnimatorListener>(); private BaseViewAnimator animator; private long duration = DURATION; private long delay = NO_DELAY; private Interpolator interpolator; private View target; private AnimationComposer(Techniques techniques) { this.animator = techniques.getAnimator(); } private AnimationComposer(BaseViewAnimator animator) { this.animator = animator; } public AnimationComposer duration(long duration) { this.duration = duration; return this; } public AnimationComposer delay(long delay) { this.delay = delay; return this; } public AnimationComposer interpolate(Interpolator interpolator) { this.interpolator = interpolator; return this; } public AnimationComposer withListener(Animator.AnimatorListener listener) { callbacks.add(listener); return this; } public YoYoString playOn(View target) { this.target = target; return new YoYoString(new YoYo(this).play(), this.target); } }通过一系列方法设置一系列参数,最后调用
playOn(View target)
public YoYoString playOn(View target) { this.target = target; return new YoYoString(new YoYo(this).play(), this.target); }来开启动画,实际上最后还是调用了new YoYo(this).play()来开启动画:
private BaseViewAnimator play() { animator.setTarget(target); animator.setDuration(duration) .setInterpolator(interpolator) .setStartDelay(delay); if (callbacks.size() > 0) { for (Animator.AnimatorListener callback : callbacks) { animator.addAnimatorListener(callback); } } animator.animate(); return animator; }
animator.animate();是调用如下方法:
/** * 开始动画 */ public void animate() { start(); } /** * 开始动画 */ public void start() { mAnimatorSet.setDuration(mDuration); mAnimatorSet.start(); }然后各种动画效果就不分析了。
相关文章推荐
- Android比较好的10个开源框架
- Android百度地图的简单实现
- android 实现悬架控制
- android:onClick vs setOnClickListener
- Android KITKAT 以上实现沉浸式状态栏
- Android应用性能调试
- Android电池驱动电池服务(自用)
- android intentService(三)
- Android中Bitmap格式压缩存储
- Android缩放动画
- “哎哟!蛮吊的” 之 Android Activity生命周期
- Android缩放动画
- android 位移动画移动后原地绑定的点击事件还在
- Android源码——安卓聊天
- Android Logo 尺寸比例制作
- Android RSA加密解密功能的实现
- Android ndk 单步调试
- Android碎片第三期
- Android Studio手动导入第三方类库
- 【第五篇】androidEventbus源代码阅读和分析之发送粘性事件和接收粘性事件代码分析