Android彩虹菜单
16lz
2021-01-26
核心代码:
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
更多相关文章
- Android(安卓)动画效果
- 单选按钮和复选框
- ExpandableButtonMenu |底部弹出菜单
- TextSwitcher切换动画
- 自定义弹窗,dialog
- android 将一个上下文菜单列表视图
- android按钮样式
- Android学习笔记-Android初级 (二)
- Android(安卓)使用ActivityOptions实现Activity转场动画