码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2014-11-26 06:37:35      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   io   ar   使用   sp   java   

效果图:

bubuko.com,布布扣


制作思路:

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

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

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

bubuko.com,布布扣

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

代码:

1、MyAnimation类:

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


2、MainActivity类:

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

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

标签:android   style   blog   http   io   ar   使用   sp   java   

原文地址:http://www.cnblogs.com/lkda992/p/4122343.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!