核心代码:
MainActivity.java

package com.huatec.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.ImageButton;import android.widget.RelativeLayout;public class MainActivity extends AppCompatActivity {    private ImageButton imageButton_a1, imageButton_b2;//触发菜单的按钮    private RelativeLayout l2, l3;//二级与三级菜单布局    private boolean isl2Show = true;//判断二级菜单是否显示    private boolean isl3Show = true; //盘算三级菜单是否显示    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取触发菜单的按钮        imageButton_a1 = findViewById(R.id.a_1);        imageButton_b2 = findViewById(R.id.b_2);        //获取二级菜单与三级菜单布局        l2 = findViewById(R.id.level_2);        l3 = findViewById(R.id.level_3);        //单击按钮:显示或隐藏三级菜单        imageButton_b2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (isl3Show) {                    //隐藏3级导航菜单                    MyAnimation.animationOUT(l3, 500, 0);                } else {                    //显示3级导航菜单                    MyAnimation.animationIN(l3, 500);                }                //根据当前的显示状态设置为相反的状态,如3级菜单已经关闭。这里将设置状态为false                isl3Show = !isl3Show;            }        });        //单击按钮:显示二级菜单或隐藏二级三级菜单        imageButton_a1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (!isl2Show) {                    //显示2级导航菜单                    MyAnimation.animationIN(l2, 500);                } else {                    if (isl3Show) {                        //隐藏3级导航菜单                        MyAnimation.animationOUT(l3, 500, 0);                        //隐藏2级导航菜单                        MyAnimation.animationOUT(l2, 500, 500);                        isl3Show = !isl3Show;                    } else {                        //隐藏2级导航菜单                        MyAnimation.animationOUT(l2, 500, 0);                    }                }                isl2Show = !isl2Show;            }        });    }}

MyAnimation.java

package com.huatec.myapplication;import android.view.View;import android.view.ViewGroup;import android.view.animation.Animation;import android.view.animation.RotateAnimation;public class MyAnimation {    /**     * 菜单进入动画     *     * @param viewGroup 菜单布局,对该布局进行旋转     * @param duration  动画时间     */    public static void animationIN(ViewGroup viewGroup, int duration) {        //便利布局中按钮控件        for (int i = 0; i < viewGroup.getChildCount(); i++) {            viewGroup.getChildAt(i).setVisibility(View.VISIBLE);    //设置显示            viewGroup.getChildAt(i).setFocusable(true);             //获得焦点            viewGroup.getChildAt(i).setClickable(true);             //可以点击        }        /**         * 旋转动画         * RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue)         * fromDegrees 开始旋转角度         * toDegrees 旋转到的角度         * pivotXType X轴 参照物         * pivotXValue x轴 旋转的参考点         * pivotYType Y轴 参照物         * pivotYValue Y轴 旋转的参考点         */        Animation animation = new RotateAnimation(-180, 0,                Animation.RELATIVE_TO_SELF, 0.5f,                Animation.RELATIVE_TO_SELF, 1.0f);        //创建旋转动画        animation.setFillAfter(true);                            //停留在动画结束位置        animation.setDuration(duration);                         //动画过程的时间        viewGroup.startAnimation(animation);                     //启动动画    }    /**     * 菜单退出动画     *     * @param viewGroup     * @param duration     * @param startOffSet     */    public static void animationOUT(final ViewGroup viewGroup, int duration, int startOffSet) {        //创建旋转动画        Animation animation = new RotateAnimation(0, -180,                Animation.RELATIVE_TO_SELF, 0.5f,                Animation.RELATIVE_TO_SELF, 1.0f);        animation.setFillAfter(true);//停留在动画结束位置        animation.setDuration(duration);//动画过程的时间        animation.setStartOffset(startOffSet);//设置动画多久后执行        //设置动画监听事件        animation.setAnimationListener(new Animation.AnimationListener() {            @Override            public void onAnimationStart(Animation animation) {            }            @Override            public void onAnimationRepeat(Animation animation) {            }            /**             * 动画结束后的事件处理             */            @Override            public void onAnimationEnd(Animation animation) {                for (int i = 0; i < viewGroup.getChildCount(); i++) {                    viewGroup.getChildAt(i).setVisibility(View.GONE);       //设置隐藏菜单中按钮                    viewGroup.getChildAt(i).setFocusable(false);            //失去焦点                    viewGroup.getChildAt(i).setClickable(false);            //不可单击                }            }        });        viewGroup.startAnimation(animation);//启动退出动画    }}

activity_main布局文件:

<?xml version="1.0" encoding="utf-8"?>                                                                                                                            

效果图:


2018-05-18 22_41_31.gif

源码地址:https://github.com/280357392/RainbowMenu

更多相关文章

  1. Android(安卓)动画效果
  2. 单选按钮和复选框
  3. ExpandableButtonMenu |底部弹出菜单
  4. TextSwitcher切换动画
  5. 自定义弹窗,dialog
  6. android 将一个上下文菜单列表视图
  7. android按钮样式
  8. Android学习笔记-Android初级 (二)
  9. Android(安卓)使用ActivityOptions实现Activity转场动画

随机推荐

  1. php 基本的常用字符串函数
  2. Laravel Migration - 创建从现有列填充
  3. 天气预报API接口大全
  4. 《Zend studio 12 + UPUPW+PHP5.4开发平
  5. 使用jQuery和ajax更改浏览器地址栏URL,无
  6. php-fpm的两种配置方式
  7. 在通过AJAX响应发送的页面上执行javascri
  8. php中的文件包含
  9. PHP格式化日期,显示“刚刚,几分钟前,几小时
  10. 在多维数组中查找最小值并返回键