优酷菜单

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         <ImageView
105             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         <ImageView
113             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         <ImageView
123             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         <ImageView
133             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 view
11      */
12     public static void startAnimOut(RelativeLayout view) {
13         startAnimOut(view, 0);
14     }
15 
16     /**
17      * 让指定view 延时 执行旋转离开的动画,
18      * @param offset
19      *            延时的时间
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 view
38      */
39     public static void startAnimIn(RelativeLayout view) {
40         startAnimIn(view, 0);
41     }
42 
43     /**
44      * 让指定的view 延时执行 旋转进入的动画
45      * @param i
46      *            延时的时间
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 }
RotateAnimation animation = new RotateAnimation(
0, 180,view.getWidth() / 2, view.getHeight());
四个参数分别为:开始度数,结束度数,后两个为圆心点。
  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     @Override
115     /**
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

原文地址:https://www.cnblogs.com/androidsj/p/3993892.html