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

制作思路:
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)的更多相关文章
- Android自己定义控件系列一:Android怎样实现老版优酷client三级环形菜单
转载请附上本文链接:http://blog.csdn.net/cyp331203/article/details/40423727 先来看看效果: 一眼看上去好像还挺炫的,感觉比較复杂...实际上并不 ...
- Android自己定义控件:进度条的四种实现方式
前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://down ...
- Android自己定义控件系列五:自己定义绚丽水波纹效果
尊重原创!转载请注明出处:http://blog.csdn.net/cyp331203/article/details/41114551 今天我们来利用Android自己定义控件实现一个比較有趣的效果 ...
- android 自己定义控件
Android自己定义View实现非常easy 继承View,重写构造函数.onDraw.(onMeasure)等函数. 假设自己定义的View须要有自己定义的属性.须要在values下建立attrs ...
- Android自己定义控件皮肤
Android自己定义控件皮肤 对于Android的自带控件,其外观仅仅能说中规中矩,而我们平时所示Android应用中,一个简单的button都做得十分美观.甚至于很多button在按下时的外观都有 ...
- android 自己定义控件属性(TypedArray以及attrs解释)
近期在捣鼓android 自己定义控件属性,学到了TypedArray以及attrs.在这当中看了一篇大神博客Android 深入理解Android中的自己定义属性.我就更加深入学习力一番.我就沿着这 ...
- Android自己定义控件之应用程序首页轮播图
如今基本上大多数的Android应用程序的首页都有轮播图.就是像下图这种(此图为转载的一篇博文中的图.拿来直接用了): 像这种组件我相信大多数的应用程序都会使用到,本文就是自己定义一个这种组件,能够动 ...
- Android自己定义控件(状态提示图表)
[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重分享成果] 1 背景 前面分析那么多系统源代码了.也该暂停下来歇息一下,趁昨晚闲着看见一个有意思的需求就操 ...
- Android自己定义控件系列二:自己定义开关button(一)
这一次我们将会实现一个完整纯粹的自己定义控件,而不是像之前的组合控件一样.拿系统的控件来实现.计划分为三部分:自己定义控件的基本部分,自己定义控件的触摸事件的处理和自己定义控件的自己定义属性: 以下就 ...
随机推荐
- Android中Drawable分类汇总(上)
Android把可绘制的对象抽象为Drawable,不同的图形图像资源就代表着不同的drawable类型.Android FrameWork提供了一些具体的Drawable实现,通常在代码中都不会直接 ...
- CloudStack全局配置參数
參数 描写叙述 类型 默认值 account.cleanup.interval 清除用户账户所须要等待的时间(秒) 整数 86400 agent.lb.enabled If agent load ba ...
- iOS 编程之 使用 Xcode6配置.pch文件
刚上手 Xcode6 的人,总会发现之前在 6 之前常常会在“利用名-Prefix.pch”这个文件中来配置我们全局要用到的头文件,但是 xcode6 没有了,人家说,这类东西有时候也会出现1些稀里糊 ...
- BZOJ 1529: [POI2005]ska Piggy banks( 并查集 )
每一连通块砸开一个就可以拿到所有的钱, 所以用并查集求连通块数 ------------------------------------------------------------------- ...
- windows的消息传递--消息盒子(超详细EM_UNDO等消息)
使用delphi的消息机制可以方便操作后台,其中重要的就是sendmessage()函数.下面讲解一下这个函数 function SendMessage(hWnd: HWND; Msg: UINT; ...
- php导出excel数据
提供两种导出excel方法 1 最简单的导出excel header('Content-Type: application/vnd.ms-excel'); //设置文件类型 也可以将 vnd.ms ...
- CF 8D Two Friends (三分+二分)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意 :有三个点,p0,p1,p2.有两个人ali ...
- Eclipse用法和技巧六:自动生成get和set方法1
java的类中,除了常量声明为静态且公有的,一般的对象数据作用域,都是声明为私有的.这样做能保护对象的属性不会被随意改变,调试的时候也会方便很多:在类的公有方法中大一个调用栈就能看到哪里改了属性值.声 ...
- Eclipse用法和技巧二:自动生成Main方法1
刚开始编写java小程序,基本都要用到main方法.后期开发大一点的程序,也可以用main方法进行单元测试.总是编写main方法,感觉太无聊了,幸好Eclipse可以帮我们自动生成main方法.见图: ...
- Java面试题精选(一)基础概念和面向对象
-- 基础概念和面向对象 -- 全程将为大家剖析几大部分内容,由于学习经验有限,望大家谅解并接受宝贵的意见: 基础概念部分 ★★ : 常出现的高频率单词的区别理解(异常. ...