NoBlueSky的专栏

经常上github的同学都知道Yalantis公司,像神一样的存在 它家经常出产一些酷炫的动画 大家可以去看下 今天我们来看看他家的这个动画 https://github.com/Yalantis/Side-Menu.Android

是不是很酷炫 ok 我们来分析下

分析完了 其实没那么复杂 那我们怎么解决呢 翻转动画 android已经给我们提供好了rotationY这个属性动画 一看明了

ObjectAnimator anim= ObjectAnimator.ofFloat(target, “rotationY”, 0f, 90f);

动画集合 属性动画里面也已经有了动画集合这个东东 我们就用AnimatorSet 注意观察上面的效果 动画是一个接一个播放的 这个很重要

开始写布局 很简单

==”match_parent”android:orientation=”horizontal”>//菜单项<LinearLayout=”wrap_content”android:orientation=”vertical”><Button=”@color/blue”android:visibility=”invisible” /><Button=”@color/blue”android:visibility=”invisible” /><Button=”@color/blue”android:visibility=”invisible” /><Button=”@color/blue”android:visibility=”invisible” /><Button=”@color/blue”android:visibility=”invisible” /><Button=”@color/blue”android:visibility=”invisible” /><Button=>//按钮<LinearLayout=”40dp”android:gravity=”center”><Button=”match_parent”android:text=”show” /><Button=></LinearLayout>

右边是多个button组成的菜单列表

我们已经知道了每个菜单子项都是一个动画 所以我们要给每个button生成一个动画

//显示动画private ObjectAnimator createItemVisAnim(final View target, int index) {target.setPivotX(0);target.setPivotY(target.getHeight() / 2);ObjectAnimator invisToVis = ObjectAnimator.ofFloat(target, “rotationY”, 90f, 0f);invisToVis.setDuration(MAX_DURATION-per_duration* index);invisToVis.addListener(new AnimatorListenerAdapter() {(Animator animation) {super.onAnimationStart(animation);target.setVisibility(View.VISIBLE);}});return invisToVis;}

上面代码是创建显示单个菜单子项动画 我们需要一个显示动画集合

(ViewGroup parent) {per_duration=MAX_DURATION/parent.getChildCount();ArrayList<Animator> visAnimList = new ArrayList<Animator>();for (int i = 0; i < parent.getChildCount(); i++) {ObjectAnimator itemAnim = createItemVisAnim(parent.getChildAt(i), i);visAnimList.add(itemAnim);}visAnimSet = new AnimatorSet();visAnimSet.playSequentially(visAnimList);}

我们遍历了菜单容器里面的每个button也就是菜单 ,每个菜单都创建一个动画,然后放在了动画集合里面,,并让它们顺序执行 。是不是很简单。隐藏动画和显示动画是一样的,修改旋转角度就可以了

//隐藏动画private ObjectAnimator createItemInvisAnim(final View target, int index) {target.setPivotX(0);target.setPivotY(target.getHeight() / 2);ObjectAnimator visToInvis = ObjectAnimator.ofFloat(target, “rotationY”, 0f, 90f);visToInvis.setDuration(per_duration+per_duration* index);return visToInvis;}

最后看一下我们的效果

效果有一些差别,主要是时间控制和颜色设计 大家可以根据自己要求调整 好吧 第一次写文章 感觉还是有点难度 看来以后要锻炼多写写了

同生天地间,为何我不能。

NoBlueSky的专栏

相关文章:

你感兴趣的文章:

标签云: