优酷菜单

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 }
  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

时间: 2024-10-12 04:40:52

优酷菜单的相关文章

自定义View(一)-ViewGroup实现优酷菜单

自定义View的第一个学习案例 ViewGroup是自动以View中比较常用也比较简单的一种方式,通过组合现有的UI控件,绘制出一个全新的View 效果如下: 主类实现如下: package com.demo.youku; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.K

模仿优酷菜单

转载注明出处:    http://blog.csdn.net/forwardyzk/article/details/42554691 在开发中,会使用菜单,现在模拟一下优酷的菜单效果. 其实效果都是由android基本的动画效果组成的,在合适的时间显示对应的动画,即可展示出不一样的效果. 思路: 1.自定义类RotateMenuView继承RelativeLayout. 2.在需要加载的布局文件中,添加对应的菜单View. 3.定义菜单进入和出去的动画效果,使用旋转动画,进来顺时针,出去的时候

android自定义控件之模仿优酷菜单

去年的优酷HD版有过这样一种菜单,如下图: 应用打开之后,先是三个弧形的三级菜单,点击实体键menu之后,这三个菜单依次旋转退出,再点击实体键menu之后,一级菜单会旋转进入,点击一级菜单,二级菜单旋转进入,点击二级菜单的menu键,三级菜单旋转进入,再次点击二级菜单的旋转键,三级菜单又会旋转退出,这时再点击一级菜单,二级菜单退出,最后点击实体menu键,一级菜单退出. 总体来说实现这样的功能: (1)点击实体menu键时,如果界面上有菜单显示,不管有几个,全部依次退出,如果界面上没有菜单显示,

Android优酷菜单组件自定义

主要做的就是模仿优酷手机客户端的底部菜单控件的实现.先来几张图片,点击中间的home,显示二级菜单,点击二级菜单的menu,显示三级菜单. 这是实现起来最简单的一个布局,但是从中学会了自定义动画和一些布局的基本知识,从中还是收获很大的. 首先是定义布局文件,三个菜单条其实就是三个relativelayout,level1,level2,level3,然后每个菜单条中的小标题就加到对应的相对布局中. <RelativeLayout xmlns:android="http://schemas.

Android仿优酷菜单效果

一.效果图 二.主要的技术点 1.RelativeLayout布局 2.RotateAnimation旋转动画 三.需求 1.点击二级菜单中的“menu”键控制三级菜单的进入和退出动画效果: 2.点击一级菜单中的“home”键控制二级和三级菜单的进入和退出效果: 3.点击手机上的菜单键控制一级.二级和三级菜单的进入和退出效果. 四.实例代码 1.布局文件:activity_main.xml <RelativeLayout xmlns:android="http://schemas.andr

Android自定义控件——仿优酷圆盘菜单

尊重作者劳动成果,转载时请标明该文章出自  http://blog.csdn.net/allen315410/article/details/39232535 最近学习的时候,看见一份资料上教怎么写自定义控件,上面的示例用的是优酷早期版本的客户端,该客户端的菜单就是一个自定义的组件(现在的版本就不清楚有没有了,没下载过了),好吧,废话不多说,先上优酷的原型图. 这个自定义组件感官上看是,里外三层设计,每一层上有布置不同的菜单按钮,每一层又设置了进入和退出的动画,来增强用户的体验效果.这种设计非常

[android] 优酷环形菜单-相对布局练习

优酷环形菜单 布局文件,使用<RelativeLayout/>控件作为第一级菜单,相对布局,位于父控件的底部,水平居中,因为图片不是特别的标准,因此宽度和高度都钉死,宽度是高度的两倍 二次菜单和三级菜单都一样的布局 小房子的图标<imageView/>控件,在父控件中居中 第二级搜索图标,位于父控件的底部,上下左右maigin10dp 第二级菜单图标,位于父控件的顶部,水平居中,marginTop 10dp 第二级叹号图标,位于父控件的底部,右边,margin 10dp 第三级的图

优酷、YouTube、Twitter及JustinTV视频网站架构设计

优酷视频网站架构 一.网站基本数据概览 据2010年统计,优酷网日均独立访问人数(uv)达到了8900万,日均访问量(pv)更是达到了17亿,优酷凭借这一数据成为google榜单中国内视频网站排名最高的厂商.     硬件方面,优酷网引进的戴尔服务器主要以 PowerEdge 1950与PowerEdge 860为主,存储阵列以戴尔MD1000为主,2007的数据表明,优酷网已有1000多台服务器遍布在全国各大省市,现在应该更多了吧. 二.网站前端框架 从一开始,优酷网就自建了一套CMS来解决前

爱奇艺、优酷、腾讯视频竞品分析报告2016(二)

接上一篇<爱奇艺.优酷.腾讯视频竞品分析报告2016(一)> http://milkyqueen520.blog.51cto.com/11233158/1760192 2.4 产品设计与交互 2.4.1  视觉风格 APP设计风格从视觉效果上至少给用户传达了两个信息:一是APP的整体基调.二是APP的目标人群. 在设计风格表现上,颜色占据了80%以上的视觉体验.因此要做好设计风格,主要做好界面的颜色搭配和分布.另外颜色是有情感的,不同的色彩能给于用户不同的印象和感受,而且不同的人群对颜色偏好也