首页 > 代码库 > 优酷菜单
优酷菜单
Android中RelativeLayout各个属性的含义
android:layout_above="@id/xxx" --将控件置于给定ID控件之上
android:layout_below="@id/xxx" --将控件置于给定ID控件之下
android:layout_toLeftOf="@id/xxx" --将控件的右边缘和给定ID控件的左边缘对齐
android:layout_toRightOf="@id/xxx" --将控件的左边缘和给定ID控件的右边缘对齐
android:layout_alignLeft="@id/xxx" --将控件的左边缘和给定ID控件的左边缘对齐
android:layout_alignTop="@id/xxx" --将控件的上边缘和给定ID控件的上边缘对齐
android:layout_alignRight="@id/xxx" --将控件的右边缘和给定ID控件的右边缘对齐
android:layout_alignBottom="@id/xxx" --将控件的底边缘和给定ID控件的底边缘对齐
android:layout_alignParentLeft="true" --将控件的左边缘和父控件的左边缘对齐
android:layout_alignParentTop="true" --将控件的上边缘和父控件的上边缘对齐
android:layout_alignParentRight="true" --将控件的右边缘和父控件的右边缘对齐
android:layout_alignParentBottom="true" --将控件的底边缘和父控件的底边缘对齐
android:layout_centerInParent="true" --将控件置于父控件的中心位置
android:layout_centerHorizontal="true" --将控件置于水平方向的中心位置
android:layout_centerVertical="true" --将控件置于垂直方向的中心位置
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context=".MainActivity" > 6 7 <TextView 8 android:layout_width="wrap_content" 9 android:layout_height="wrap_content" 10 android:layout_centerHorizontal="true" 11 android:layout_centerVertical="true" 12 android:text="@string/hello_world" /> 13 14 <!-- 底部半圆黑块 --> 15 <RelativeLayout 16 android:id="@+id/level1" 17 android:layout_width="100dp" 18 android:layout_height="50dp" 19 android:layout_alignParentBottom="true" 20 android:layout_centerHorizontal="true" 21 android:background="@drawable/level1" > 22 <!-- 小房子图片 --> 23 <ImageView 24 android:id="@+id/icon_home" 25 android:layout_width="wrap_content" 26 android:layout_height="wrap_content" 27 android:layout_centerInParent="true" 28 android:background="@drawable/icon_home" /> 29 </RelativeLayout> 30 31 <!-- 中间半圆 --> 32 <RelativeLayout 33 android:id="@+id/level2" 34 android:layout_width="180dp" 35 android:layout_height="90dp" 36 android:layout_alignParentBottom="true" 37 android:layout_centerHorizontal="true" 38 android:background="@drawable/level2" > 39 <!-- 查询图标 --> 40 <ImageView 41 android:id="@+id/icon_search" 42 android:layout_width="wrap_content" 43 android:layout_height="wrap_content" 44 android:layout_alignParentBottom="true" 45 android:layout_margin="10dp" 46 android:background="@drawable/icon_search" /> 47 <!-- 三杠图标 --> 48 <ImageView 49 android:id="@+id/icon_menu" 50 android:layout_width="wrap_content" 51 android:layout_height="wrap_content" 52 android:layout_centerHorizontal="true" 53 android:layout_marginTop="5dp" 54 android:background="@drawable/icon_menu" /> 55 <!-- 倾斜感叹号 --> 56 <ImageView 57 android:id="@+id/icon_myyouku" 58 android:layout_width="wrap_content" 59 android:layout_height="wrap_content" 60 android:layout_alignParentBottom="true" 61 android:layout_alignParentRight="true" 62 android:layout_margin="10dp" 63 android:background="@drawable/icon_myyouku" /> 64 </RelativeLayout> 65 66 <!-- 顶端半圆 --> 67 <RelativeLayout 68 android:id="@+id/level3" 69 android:layout_width="280dp" 70 android:layout_height="140dp" 71 android:layout_alignParentBottom="true" 72 android:layout_centerHorizontal="true" 73 android:background="@drawable/level3" > 74 <!-- 音乐图标 --> 75 <ImageView 76 android:id="@+id/channel1" 77 android:layout_width="wrap_content" 78 android:layout_height="wrap_content" 79 android:layout_alignParentBottom="true" 80 android:layout_marginBottom="10dp" 81 android:layout_marginLeft="10dp" 82 android:background="@drawable/channel1" /> 83 <!-- 电影图标 --> 84 <ImageView 85 android:id="@+id/channel2" 86 android:layout_width="wrap_content" 87 android:layout_height="wrap_content" 88 android:layout_above="@id/channel1" 89 android:layout_alignLeft="@id/channel1" 90 android:layout_marginBottom="6dp" 91 android:layout_marginLeft="20dp" 92 android:background="@drawable/channel2" /> 93 <!-- 小猴图标 --> 94 <ImageView 95 android:id="@+id/channel3" 96 android:layout_width="wrap_content" 97 android:layout_height="wrap_content" 98 android:layout_above="@id/channel2" 99 android:layout_alignLeft="@id/channel2"100 android:layout_marginBottom="6dp"101 android:layout_marginLeft="30dp"102 android:background="@drawable/channel3" />103 <!-- -->104 <ImageView105 android:id="@+id/channel4"106 android:layout_width="wrap_content"107 android:layout_height="wrap_content"108 android:layout_centerHorizontal="true"109 android:layout_marginTop="5dp"110 android:background="@drawable/channel4" />111 <!-- -->112 <ImageView113 android:id="@+id/channel7"114 android:layout_width="wrap_content"115 android:layout_height="wrap_content"116 android:layout_alignParentBottom="true"117 android:layout_alignParentRight="true"118 android:layout_marginBottom="10dp"119 android:layout_marginRight="10dp"120 android:background="@drawable/channel7" />121 <!-- -->122 <ImageView123 android:id="@+id/channel6"124 android:layout_width="wrap_content"125 android:layout_height="wrap_content"126 android:layout_above="@id/channel7"127 android:layout_alignRight="@id/channel7"128 android:layout_marginBottom="6dp"129 android:layout_marginRight="20dp"130 android:background="@drawable/channel6" />131 <!-- -->132 <ImageView133 android:id="@+id/channel5"134 android:layout_width="wrap_content"135 android:layout_height="wrap_content"136 android:layout_above="@id/channel6"137 android:layout_alignRight="@id/channel6"138 android:layout_marginBottom="6dp"139 android:layout_marginRight="30dp"140 android:background="@drawable/channel5" />141 </RelativeLayout>142 143 </RelativeLayout>
1 package com.example.testdemo; 2 3 import android.view.animation.RotateAnimation; 4 import android.widget.RelativeLayout; 5 6 public class MyUtils { 7 8 /** 9 * 让指定的view 执行 旋转离开的动画10 * @param view11 */12 public static void startAnimOut(RelativeLayout view) {13 startAnimOut(view, 0);14 }15 16 /**17 * 让指定view 延时 执行旋转离开的动画,18 * @param offset19 * 延时的时间20 */21 public static void startAnimOut(RelativeLayout view, long offset) {22 // 默认圆为 为view的左上角, 水平向右 为 0度 顺时针旋转度数增加23 RotateAnimation animation = new RotateAnimation(0, 180,24 view.getWidth() / 2, view.getHeight());25 // 设置运行的时间26 animation.setDuration(500); 27 // 动画执行完以后,保持最后的状态28 animation.setFillAfter(true); 29 // 设置延时执行的时间30 animation.setStartOffset(offset); 31 32 view.startAnimation(animation);33 }34 35 /**36 * 让指定的view 执行 旋转进入的动画37 * @param view38 */39 public static void startAnimIn(RelativeLayout view) {40 startAnimIn(view, 0);41 }42 43 /**44 * 让指定的view 延时执行 旋转进入的动画45 * @param i46 * 延时的时间47 */48 public static void startAnimIn(RelativeLayout view, int i) {49 // 默认圆为 为view的左上角, 水平向右 为 0度 顺时针旋转度数增加50 RotateAnimation animation = new RotateAnimation(180, 360,51 view.getWidth() / 2, view.getHeight());52 // 设置运行的时间53 animation.setDuration(500); 54 // 动画执行完以后,保持最后的状态55 animation.setFillAfter(true); 56 // 设置延时执行的时间57 animation.setStartOffset(i); 58 view.startAnimation(animation);59 }60 61 }
1 package com.example.testdemo; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.view.KeyEvent; 6 import android.view.View; 7 import android.view.View.OnClickListener; 8 import android.widget.ImageView; 9 import android.widget.RelativeLayout; 10 11 public class MainActivity extends Activity implements OnClickListener { 12 13 private ImageView icon_menu; 14 private ImageView icon_home; 15 16 private RelativeLayout level1; 17 private RelativeLayout level2; 18 private RelativeLayout level3; 19 /** 20 * 判断 第3级菜单是否显示 true 为显示 21 */ 22 private boolean isLevel3Show = true; 23 /** 24 * 判断 第2级菜单是否显示 true 为显示 25 */ 26 private boolean isLevel2Show = true; 27 /** 28 * 判断 第1级菜单是否显示 true 为显示 29 */ 30 private boolean isLevel1show = true; 31 32 @Override 33 protected void onCreate(Bundle savedInstanceState) { 34 super.onCreate(savedInstanceState); 35 setContentView(R.layout.activity_main); 36 37 icon_home = (ImageView) findViewById(R.id.icon_home); 38 icon_menu = (ImageView) findViewById(R.id.icon_menu); 39 40 level1 = (RelativeLayout) findViewById(R.id.level1); 41 level2 = (RelativeLayout) findViewById(R.id.level2); 42 level3 = (RelativeLayout) findViewById(R.id.level3); 43 44 icon_home.setOnClickListener(this); 45 icon_menu.setOnClickListener(this); 46 47 } 48 49 @Override 50 public void onClick(View v) { 51 switch (v.getId()) { 52 // 处理 menu 图标的点击事件 53 case R.id.icon_menu: 54 // 如果第3级菜单是显示状态,那么将其隐藏 55 if (isLevel3Show) { 56 // 隐藏 第3级菜单 57 MyUtils.startAnimOut(level3); 58 } else { 59 // 如果第3级菜单是隐藏状态,那么将其显示 60 MyUtils.startAnimIn(level3); 61 } 62 63 isLevel3Show = !isLevel3Show; 64 65 break; 66 // 处理 home 图标 的点击事件 67 case R.id.icon_home: 68 // 如果第2级菜单是显示状态,那么就隐藏,2,3级菜单 69 if (isLevel2Show) { 70 MyUtils.startAnimOut(level2); 71 isLevel2Show = false; 72 // 如果此时,第3级菜单也显示,那也将其隐藏 73 if (isLevel3Show) { 74 MyUtils.startAnimOut(level3, 200); 75 isLevel3Show = false; 76 } 77 } else { 78 // 如果第2级菜单是隐藏状态,那么就显示2级菜单 79 MyUtils.startAnimIn(level2); 80 isLevel2Show = true; 81 } 82 break; 83 } 84 } 85 86 /** 87 * 改变第1级菜单的状态 88 */ 89 private void changeLevel1State() { 90 // 如果第1级菜单是显示状态,那么就隐藏 1,2,3级菜单 91 if (isLevel1show) { 92 MyUtils.startAnimOut(level1); 93 isLevel1show = false; 94 // 判断2级菜单是否显示 95 if (isLevel2Show) { 96 MyUtils.startAnimOut(level2, 100); 97 isLevel2Show = false; 98 // 判断3级菜单是否显示 99 if (isLevel3Show) {100 MyUtils.startAnimOut(level3, 200);101 isLevel3Show = false;102 }103 }104 } else {105 // 如果第1级菜单是隐藏状态,那么就显示 1,2级菜单106 MyUtils.startAnimIn(level1);107 isLevel1show = true;108 MyUtils.startAnimIn(level2, 200);109 isLevel2Show = true;110 }111 112 }113 114 @Override115 /**116 * 响应按键的动作117 */118 public boolean onKeyDown(int keyCode, KeyEvent event) {119 // 监听 menu 按键120 if (keyCode == KeyEvent.KEYCODE_MENU) { 121 changeLevel1State();122 }123 return super.onKeyDown(keyCode, event);124 }125 126 }
DEMO下载地址:http://pan.baidu.com/s/1bnaUFhl
优酷菜单