效果图:

制作思路:

1、先分析这个效果,事实上能够理解为把三级菜单分成level1,level2,level3,level1是始终显示的。

点击level1后,level2会出现;点击level2后,level3会出现;level2,level3出现后,点击level1,level2和level3都会消失。

然后消失和出现我们用到了一个动画效果。

2、动画效果用到的是RotateAnimation。因为我们都是用同一个效果,那么我们仅仅要写一个类,把效果实现了就能够了。要是使用RotateAnimation的话。我们会不断的复用一些代码,这样开发的效率会比較低。

3、RotateAnimation的旋转进入和旋转出去是个坑——由于他是在X轴顺时针方向旋转的。大家能够看看图:

总体思路就是这样,接下来就是一些操作了:

代码:

1、MyAnimation类:

public class MyAnimation{
public static void animationIn(View view){
animationIn(view,0);
} public static void animationOut(View view){
animationOut(view,0);
} public static void animationIn(View view,long delay){
RotateAnimation animation = new RotateAnimation(180, 360, view.getWidth()/2, view.getHeight());
animation.setDuration(500);
animation.setFillAfter(true);
animation.setStartOffset(delay); view.startAnimation(animation);
} public static void animationOut(View view,long delay){
RotateAnimation animation = new RotateAnimation(0, 180, view.getWidth()/2, view.getHeight());
animation.setDuration(500);
animation.setFillAfter(true);
animation.setStartOffset(delay); view.startAnimation(animation);
}
}

2、MainActivity类:

public class MainActivity extends Activity implements OnClickListener{
private boolean isLevel2showed,isLevel3showed; private RelativeLayout level1,level2,level3;
private ImageButton home,menu; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); isLevel2showed = false;
isLevel3showed = false;
initLayout();
initImageButton();
} public void initLayout() {
level1 = (RelativeLayout)findViewById(R.id.relate_level1);
level2 = (RelativeLayout)findViewById(R.id.relate_level2);
level3 = (RelativeLayout)findViewById(R.id.relate_level3); level2.setVisibility(View.INVISIBLE);
level3.setVisibility(View.INVISIBLE);
} public void initImageButton() {
home = (ImageButton)level1.findViewById(R.id.home);
menu = (ImageButton)level2.findViewById(R.id.menu); home.setOnClickListener(this);
menu.setOnClickListener(this);
} @Override
public void onClick(View v) {
switch(v.getId()){
case R.id.home:
if(!isLevel2showed){
isLevel2showed = true;
MyAnimation.animationIn(level2);
}else if(!isLevel3showed){
isLevel2showed = false;
MyAnimation.animationOut(level2);
}else{
isLevel2showed = false;
isLevel3showed = false;
MyAnimation.animationOut(level3);
MyAnimation.animationOut(level2,500);
} break;
case R.id.menu:
if(!isLevel3showed){
isLevel3showed = true;
MyAnimation.animationIn(level3);
}else{
isLevel3showed = false;
MyAnimation.animationOut(level3);
}
break;
}
}
}



源代码下载

Android自己定义控件:老版优酷的三级菜单(效果图 + Demo)的更多相关文章

  1. Android自己定义控件系列一:Android怎样实现老版优酷client三级环形菜单

    转载请附上本文链接:http://blog.csdn.net/cyp331203/article/details/40423727 先来看看效果: 一眼看上去好像还挺炫的,感觉比較复杂...实际上并不 ...

  2. Android自己定义控件:进度条的四种实现方式

    前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://down ...

  3. Android自己定义控件系列五:自己定义绚丽水波纹效果

    尊重原创!转载请注明出处:http://blog.csdn.net/cyp331203/article/details/41114551 今天我们来利用Android自己定义控件实现一个比較有趣的效果 ...

  4. android 自己定义控件

    Android自己定义View实现非常easy 继承View,重写构造函数.onDraw.(onMeasure)等函数. 假设自己定义的View须要有自己定义的属性.须要在values下建立attrs ...

  5. Android自己定义控件皮肤

    Android自己定义控件皮肤 对于Android的自带控件,其外观仅仅能说中规中矩,而我们平时所示Android应用中,一个简单的button都做得十分美观.甚至于很多button在按下时的外观都有 ...

  6. android 自己定义控件属性(TypedArray以及attrs解释)

    近期在捣鼓android 自己定义控件属性,学到了TypedArray以及attrs.在这当中看了一篇大神博客Android 深入理解Android中的自己定义属性.我就更加深入学习力一番.我就沿着这 ...

  7. Android自己定义控件之应用程序首页轮播图

    如今基本上大多数的Android应用程序的首页都有轮播图.就是像下图这种(此图为转载的一篇博文中的图.拿来直接用了): 像这种组件我相信大多数的应用程序都会使用到,本文就是自己定义一个这种组件,能够动 ...

  8. Android自己定义控件(状态提示图表)

    [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重分享成果] 1 背景 前面分析那么多系统源代码了.也该暂停下来歇息一下,趁昨晚闲着看见一个有意思的需求就操 ...

  9. Android自己定义控件系列二:自己定义开关button(一)

    这一次我们将会实现一个完整纯粹的自己定义控件,而不是像之前的组合控件一样.拿系统的控件来实现.计划分为三部分:自己定义控件的基本部分,自己定义控件的触摸事件的处理和自己定义控件的自己定义属性: 以下就 ...

随机推荐

  1. ※编程随笔※=>☆编程基础☆=>※№ SVN工具自动属性 $Author$ $Date$ $Revision$ $URL$ $Header$替换

    TortoiseSVN设置->常规设置->subversion 配置文件 ->编辑 或者 Windows XP 在 C:\Documents and Settings\Adminis ...

  2. VPN指定某个程序,其实是改路由表(赛风支持VPN和SSH和SSH+模式)

    其实就是使用IE代理的意思,方法有很多.最简单的就是读取注册表中的代理信息.具体找;\Software\Microsoft\Windows\CurrentVersion\Internet Settin ...

  3. Docker学习笔记(1) — docker 常用命令

    1. docker version显示 Docker 版本信息.2. docker info显示 Docker 系统信息,包括镜像和容器数.3. docker searchdocker search ...

  4. Android ListView条目全选功能,不用checkbox实现!

    大家好,翻了翻曾经的笔记,发现了一个我特别标记的功能,那就是ListView全选功能,顿时想起了我那个时候苦逼的生涯,因为我大学机械出身,大学毕业了都不知道什么叫代码,在58干了一段销售.实在是干不下 ...

  5. µC/OS-II版本升级指南

    IDE:     MDK V4+ MCU:   LPC17xx(Cortex-M3) RTOS: µC/OS-II        升级顺序:V2.52->V2.62->V2.76-> ...

  6. 学IT技术 轻松高薪就业

    如今的社会是大鱼吃小鱼的时代,假设你没有过强的技术,是非常难在社会上立足,更不要谈占有一席之地了.假设你想学一门好技术,那你想知道如今学什么技术好吗?我想这要看如今市场须要什么人才,缺什么人才.同一时 ...

  7. EasyUI - Tabs 选项卡标签

    基本效果: 效果图: html代码: <div id="tab"> <div title="tab1" > <p>tab1& ...

  8. <input type=button> 跳转页面

    打开新页面 标题" type="button" onclick='window.open("bedzhao.aspx")' /> 转换本页面 标 ...

  9. Servlet的学习之Session(5)

    在上一篇中我们介绍了如果使用Session来做一个简单的用户登录案例,在本篇中我们继续使用Session技术来做一个防止表单重复提交的案例. 这是一个很重要的知识点,在很多框架中都有防止表单重复提交的 ...

  10. 2015 Multi-University Training Contest 1

    最近真是太废柴了,题没做几道,也没学什么新知识,多校做了三场也没总结~诶!好好学吧! 多校第一场感觉被完虐...orz... Hdu 5288 OO’s Sequence 题目链接:http://ac ...