先分析这个效果,其实可以理解为把三级菜单分成

效果图:

制作思路:

1、先分析这个效果,其实可以理解为把三级菜单分成
level1,level2,level3,level1是始终显示的。点击level1后,level2会出现;点击level2后,level3会出
现;level2,level3出现后,点击level1,level2和level3都会消失。然后消失和出现我们用到了一个动画效果。

2、动画效果用到的是RotateAnimation,由于我们都是用同一个效果,那么我们只要写一个类,把效果实现了就可以了。要是使用RotateAnimation的话,我们会不断的复用一些代码,这样开发的效率会比较低。

3、RotateAnimation的旋转进入和旋转出去是个坑——因为他是在X轴顺时针方向旋转的。大家可以看看图:

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

代码:

1、MyAnimation类:

  1. public class MyAnimation{
  2. public static void animationIn(View view){
  3. animationIn(view,0);
  4. }
  5. public static void animationOut(View view){
  6. animationOut(view,0);
  7. }
  8. public static void animationIn(View view,long delay){
  9. RotateAnimation animation = new RotateAnimation(180, 360, view.getWidth()/2, view.getHeight());
  10. animation.setDuration(500);
  11. animation.setFillAfter(true);
  12. animation.setStartOffset(delay);
  13. view.startAnimation(animation);
  14. }
  15. public static void animationOut(View view,long delay){
  16. RotateAnimation animation = new RotateAnimation(0, 180, view.getWidth()/2, view.getHeight());
  17. animation.setDuration(500);
  18. animation.setFillAfter(true);
  19. animation.setStartOffset(delay);
  20. view.startAnimation(animation);
  21. }
  22. }

2、MainActivity类:

    1. public class MainActivity extends Activity implements OnClickListener{
    2. private boolean isLevel2showed,isLevel3showed;
    3. private RelativeLayout level1,level2,level3;
    4. private ImageButton home,menu;
    5. @Override
    6. protected void onCreate(Bundle savedInstanceState) {
    7. super.onCreate(savedInstanceState);
    8. setContentView(R.layout.main);
    9. isLevel2showed = false;
    10. isLevel3showed = false;
    11. initLayout();
    12. initImageButton();
    13. }
    14. public void initLayout() {
    15. level1 = (RelativeLayout)findViewById(R.id.relate_level1);
    16. level2 = (RelativeLayout)findViewById(R.id.relate_level2);
    17. level3 = (RelativeLayout)findViewById(R.id.relate_level3);
    18. level2.setVisibility(View.INVISIBLE);
    19. level3.setVisibility(View.INVISIBLE);
    20. }
    21. public void initImageButton() {
    22. home = (ImageButton)level1.findViewById(R.id.home);
    23. menu = (ImageButton)level2.findViewById(R.id.menu);
    24. home.setOnClickListener(this);
    25. menu.setOnClickListener(this);
    26. }
    27. @Override
    28. public void onClick(View v) {
    29. switch(v.getId()){
    30. case R.id.home:
    31. if(!isLevel2showed){
    32. isLevel2showed = true;
    33. MyAnimation.animationIn(level2);
    34. }else if(!isLevel3showed){
    35. isLevel2showed = false;
    36. MyAnimation.animationOut(level2);
    37. }else{
    38. isLevel2showed = false;
    39. isLevel3showed = false;
    40. MyAnimation.animationOut(level3);
    41. MyAnimation.animationOut(level2,500);
    42. }
    43. break;
    44. case R.id.menu:
    45. if(!isLevel3showed){
    46. isLevel3showed = true;
    47. MyAnimation.animationIn(level3);
    48. }else{
    49. isLevel3showed = false;
    50. MyAnimation.animationOut(level3);
    51. }
    52. break;
    53. }
    54. }
    55. }
时间: 2024-11-13 06:30:56

先分析这个效果,其实可以理解为把三级菜单分成的相关文章

css三级菜单效果

一个简单实用的css三级菜单效果 <!doctype html> <html> <head> <meta charset="utf-8"> <title>css实现三级菜单</title> <style type="text/css"> *{margin:0;padding:0} ul{list-style:none} a{text-decoration:none} body{fon

muduo源码分析--我对muduo的理解

分为几个模块 EventLoop.TcpServer.Acceptor.TcpConnection.Channel等 对于EventLoop来说: 他只关注里面的主驱动力,EventLoop中只关注poll,这类系统调用使得其成为Reactor模式,EventLoop中有属于这个loop的所有Channel,这个loop属于哪一个Server. 几个类存在的意义: 从应用层使用的角度来看,用户需要初始化一个EventLoop,然后初始化一个TcpServer(当然也可以自定义个TcpServer

MyBatis源码分析(三)-SqlSession理解

SqlSession理解 一.创建SqlSession 1.创建事务 a.事务工厂根据DataSource创建一个事务对象(Connection对象,事务级别,是否自动提交) b.事务工厂根据Connection创建一个事务对象(事务级别和是否自动提交已经被设置在Connection对象中) c.系统默认的事务工厂是ManagedTransactionFactory,默认是关闭连接的 private boolean closeConnection = true; 2.创建Executor(sta

TCP头部分析与确认号的理解

1.TCP的特点: 基于字节流面向连接可靠传输缓冲传输全双工流量控制 2.头部格式和说明 图源百度.如下图示,就是TCP包的头部结构.可以看到这个头部最少有4x5=20个字节. 另外还需要理解TCP协议是承载在IP协议中的.关于IP协议可以参考:http://www.cnblogs.com/xcywt/p/8067521.html 源端口号和目的端口号:再加上Ip首部的源IP地址和目的IP地址可以唯一确定一个TCP连接数据序号:表示在这个报文段中的第一个数据字节序号确认序号:仅当ACK标志为1时

[JavaSE 源码分析] 关于HashMap的个人理解

目录 HashMap是什么? HashMap的底层数据结构是什么? table容量为什么必须是二的倍数? table容量怎么做到二的倍数? Entry是怎样的结构? Node: Entry在HashMap中的具体实现 处理hash冲突的方法 HashMap初始化或扩容 resize() HashMap计算元素的hash HashMap添加/更新元素 HashMap取值 HashMap删除元素 HashMap为什么是非线程安全的? HashMap在并发场景下可能存在哪些问题? 通过Debug来进一

Linux内核分析作业(2)——理解进程调度原理

根据163MOOC学院中国科学技术大学孟宁孟老师课程所写得博客 作者:肖冲冲 原创作品请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 抱歉了,使用实验楼总出问题. 3月16日补充完整相关文章.

Android Scroll分析——滑动效果产生

相对于在Android2.x版本上出现的长按.点击事件的效果,不得不说,滑动操作具有更好的用户体验.因此,从Android 4.X版本开始,出现了更多滑动操作的效果.越来越多第三方应用模仿这样的效果,来改善自己的应用.本文,我们刨根问底来探寻滑动效果的产生. 滑动效果如何产生 滑动一个View,其本质就是移动一个View.便是改变它的坐标位置,它的原理与动画产生的效果原理应该是如出一辙的.其最终本质都是改变其坐标.所以,我们要实现View滑动的效果,就只需要监听用户的触摸事件,动态改变View的

CSS技巧收集——毛玻璃效果(深入理解滤镜filter)

原文链接:http://www.cnblogs.com/ghost-xyx/p/5677168.html 先上 demo和 源码 其实毛玻璃的模糊效果技术上比较简单,只是用到了 css 滤镜(filter)中的 blur 属性.但是要做一个好的毛玻璃效果,需要注意很多细节. 比如我们需要将上图中页面中间的文字区域变成毛玻璃效果,首先想到的是给其设置一个透明度,并添加模糊滤镜: .content { background-color: rgba(0,0,0,0.3); -webkit-filter

promise 的基本概念 和如何解决js中的异步编程问题 对 promis 的 then all ctch 的分析 和 await async 的理解

* promise承诺 * 解决js中异步编程的问题 * * 异步-同步 * 阻塞-无阻塞 * * 同步和异步的区别? 异步;同步 指的是被请求者 解析:被请求者(该事情的处理者)在处理完事情的时候的通知机制. 异步:当事情处理完成后被请求者会发信息通知请求者该事情处理完成.在这期间被请求者可以选择是继续等待命令请求完成还是去做其他事等待被请求者返回. 同步:当事情处理完成后被请求者不会告知请求者,等到请求者发来询问是才会告知 阻塞:非阻塞 指的是请求者 阻塞:针对请求者来说的,委托其他人处理一