自定义控件--优酷菜单
来源:互联网 发布:沪江开心词场网络异常 编辑:程序博客网 时间:2024/05/17 04:49
1.目录结构
2.MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ImageButton ibtnHome, ibtnMenu; private RelativeLayout rlInner, rlMiddle, rlOut; private boolean isLevel3Display = true; private boolean isLevel2Display = true; private boolean isLevel1Display = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { ibtnHome = (ImageButton) findViewById(R.id.ibtn_home); ibtnMenu = (ImageButton) findViewById(R.id.ibtn_menu); rlInner = (RelativeLayout) findViewById(R.id.rl_inner); rlMiddle = (RelativeLayout) findViewById(R.id.rl_middle); rlOut = (RelativeLayout) findViewById(R.id.rl_out); ibtnHome.setOnClickListener(this); ibtnMenu.setOnClickListener(this); } @Override public void onClick(View view) { if (AnimationUtil.animationCount > 0) { return; } switch (view.getId()) { case R.id.ibtn_home: if (isLevel2Display) { int delay = 0; if (isLevel3Display) { //如果第3级菜单显示,转出去 AnimationUtil.rotateOut(rlOut, 0); isLevel3Display = false; delay += 200; } //第2级菜单显示,转出去 AnimationUtil.rotateOut(rlMiddle, delay); } else { //如果第2级菜单隐藏,转进来 AnimationUtil.rotateIn(rlMiddle,0); } isLevel2Display = !isLevel2Display; break; case R.id.ibtn_menu: if (isLevel3Display) { //如果第三级菜单显示,转出去 AnimationUtil.rotateOut(rlOut, 0); } else { //如果第三级菜单隐藏,转进来 AnimationUtil.rotateIn(rlOut,0); } isLevel3Display = !isLevel3Display; break; } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (AnimationUtil.animationCount > 0) { return true; } if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) { if (isLevel1Display) { int delay=0; if (isLevel3Display) { //如果第三级菜单显示,转出去 AnimationUtil.rotateOut(rlOut, 0); isLevel3Display = false; delay+=200; } if (isLevel2Display) { //如果第二级菜单显示,转出去 AnimationUtil.rotateOut(rlMiddle, delay);//第二级菜单也转出去 isLevel2Display = false; delay+=200; } AnimationUtil.rotateOut(rlInner, delay);//第一级菜单转出去 isLevel1Display = false; } else { //顺时针转进来 AnimationUtil.rotateIn(rlInner, 0); AnimationUtil.rotateIn(rlMiddle, 200); AnimationUtil.rotateIn(rlOut, 400); isLevel1Display = isLevel2Display = isLevel3Display = true; } return true;//消费了事件 } return super.onKeyDown(keyCode, event); }}
public class AnimationUtil { public static int animationCount = 0; //逆时针旋转出去 public static void rotateOut(RelativeLayout rl, int delay) { int count = rl.getChildCount(); for (int i=0;i<count;i++ ){ rl.getChildAt(i).setEnabled(false);//禁用掉子view,让子view转出去后不可点击,弥补补间动画缺点 } RotateAnimation animation = new RotateAnimation(0f, -180f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1f);//相对于自身,逆时针旋转180度 animation.setDuration(500);//设置执行时间 animation.setFillAfter(true);//动画执行完毕,定格在执行完毕位置 animation.setStartOffset(delay);//延时执行// rl.setAnimation(rotateAnimation);// rotateAnimation.startNow(); rl.startAnimation(animation);//开启动画 animation.setAnimationListener(new MyAnimationListener()); } //顺时针旋转进来 public static void rotateIn(RelativeLayout rl,int delay) { int count = rl.getChildCount(); for (int i=0;i<count;i++ ){ rl.getChildAt(i).setEnabled(true);//使子view可用,弥补补间动画缺点 } RotateAnimation animation = new RotateAnimation(-180f, 0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1f);//相对于自身,顺时针旋转180度 animation.setDuration(500);//设置执行时间 animation.setFillAfter(true);//动画执行完毕,定格在执行完毕位置 animation.setStartOffset(delay);//延时执行// rl.setAnimation(rotateAnimation);// rotateAnimation.startNow(); rl.startAnimation(animation);//开启动画 animation.setAnimationListener(new MyAnimationListener()); } static class MyAnimationListener implements Animation.AnimationListener { @Override public void onAnimationStart(Animation animation) { animationCount++; } @Override public void onAnimationEnd(Animation animation) { animationCount--; } @Override public void onAnimationRepeat(Animation animation) { } }}
4.activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.weizh.a02_.MainActivity"> <RelativeLayout android:id="@+id/rl_inner" android:layout_width="120dp" android:layout_height="60dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:background="@drawable/level1"> <ImageButton android:id="@+id/ibtn_home" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_home" android:background="@android:color/transparent" android:paddingBottom="7dp" android:layout_centerInParent="true" /> </RelativeLayout> <RelativeLayout android:id="@+id/rl_middle" android:layout_width="220dp" android:layout_height="110dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:background="@drawable/level2"> <ImageButton android:id="@+id/ibtn_menu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_menu" android:layout_marginTop="3dp" android:background="@android:color/transparent" android:layout_centerHorizontal="true" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_search" android:background="@android:color/transparent" android:layout_alignParentBottom="true" android:layout_marginLeft="10dp" android:layout_marginBottom="10dp" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_myyouku" android:background="@android:color/transparent" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:layout_marginBottom="10dp" /> </RelativeLayout> <RelativeLayout android:id="@+id/rl_out" android:layout_width="340dp" android:layout_height="170dp" android:background="@drawable/level3" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true"> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/channel1" android:background="@android:color/transparent" android:layout_marginLeft="11dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/channel2" android:background="@android:color/transparent" android:layout_marginLeft="35dp" android:layout_marginBottom="55dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/channel3" android:background="@android:color/transparent" android:layout_marginLeft="75dp" android:layout_marginBottom="100dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/channel4" android:background="@android:color/transparent" android:layout_marginTop="5dp" android:layout_centerHorizontal="true" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/channel5" android:background="@android:color/transparent" android:layout_marginTop="25dp" android:layout_alignParentRight="true" android:layout_marginRight="75dp" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/channel6" android:background="@android:color/transparent" android:layout_marginRight="35dp" android:layout_marginBottom="55dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/channel7" android:background="@android:color/transparent" android:layout_marginRight="11dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" /> </RelativeLayout></RelativeLayout>
5.效果图(ImageView里的图片显示不是很均匀,可以在布局文件里调的,我就不调了)
源码地址:https://github.com/Jszgw/YoukuMenu
0 0
- 自定义控件--优酷菜单
- 自定义控件--优酷菜单
- 自定义控件--优酷菜单
- Android自定义控件---优酷菜单
- 自定义控件之优酷菜单
- 自定义控件(组合控件)--模仿优酷菜单
- android自定义控件之模仿优酷菜单
- 自定义控件学习之:追溯以前的优酷菜单
- 自定义控件菜单
- android控件-自定义菜单
- android 自定义菜单控件
- 自定义控件 防优酷菜单
- 自定义控件:旋转菜单
- 自定义控件:侧滑菜单
- Winform 自定义图片菜单控件
- 自定义控件-侧拉菜单
- 自定义控件之仿优酷菜单
- 自定义控件--侧拉菜单
- 图及其深搜广搜
- Java并发之线程安全性
- 天猫浏览型应用的CDN静态化架构演变
- NLineInputFormat用法-1
- 重置JDK,java -version还是为原来的情况
- 自定义控件--优酷菜单
- 图的最小生成树
- Uber无人驾驶
- 安装OpenERP到ubuntu 14.04
- bed文件转换成rpm文件
- PHP聚合数据-全国车辆违章
- 图的最短路径
- Codeforces Problem 707A Brain's Photos(水题)
- SCP命令的简单使用及在两台LINUX机器传输文件不用输密码的设置