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

效果图:

制作思路:

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

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

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

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

代码:

1、MyAnimation类:

[java] view plaincopyprint?

  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类:

[java] view plaincopyprint?

    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-10-15 06:23:46

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

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

效果图: 制作思路: 1.先分析这个效果,事实上能够理解为把三级菜单分成level1,level2,level3,level1是始终显示的. 点击level1后,level2会出现:点击level2后,level3会出现:level2,level3出现后,点击level1,level2和level3都会消失. 然后消失和出现我们用到了一个动画效果. 2.动画效果用到的是RotateAnimation.因为我们都是用同一个效果,那么我们仅仅要写一个类,把效果实现了就能够了.要是使用RotateAn

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

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

android 使用webview访问优酷无法播放视频的问题

在代码中加入 webview.getSettings().setJavaScriptEnabled(true);//支持js //webview.getSettings().setPluginsEnabled(true);//设置webview支持插件,已废弃 webview.settings.setPluginState(PluginState.ON); //设置webview支持插件 同时要在Manifest配置文件的application中加入 android:hardwareAccele

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

前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源码在最后) 最近一直在学习自定义控件,搜了许多大牛们Blog里分享的小教程,也上GitHub找了一些类似的控件进行学习.发现读起来都不太好懂,就想写这么一篇东西作为学习笔记吧. 一.控件介绍: 进度条在App中非常常见,例如下载进度.加载图片.打开文章.打开网页等等--都需要这么一个效果让用户知道我们的App正在读取,以构造良好的

Android自定义控件:进度条的四种实现方式(Progress Wheel的解析)(源码 + Demo)

Progress Wheel为GitHub热门项目,作者是:Todd-Davies,项目地址: https://github.com/Todd-Davies/ProgressWheel 前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源码在最后) 最近一直在学习自定义控件,搜了许多大牛们Blog里分享的小教程,也上GitHub找了一些类似的控件进行学习.发现读起来都不太好懂,就想

仿优酷Android客户端图片左右滑动(自动滑动)

最终效果: 页面布局main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent

高仿优酷Android客户端图片左右滑动(自动切换)

本例是用ViewPager去做的实现,支持自动滑动和手动滑动,不仅优酷网,实际上有很多商城和门户网站都有类似的实现: 具体思路: 1. 工程中需要添加android-support-v4.jar,才能使用ViewPager控件. 2. 图片的自动切换: 可使用Timer或者ScheduledExecutorService,这个有多重方式可以实现. 同时要切换底部的dots(园点) 3.Handler+Message机制更新UI,这个相信大家都很熟练,不再描述 4. 实现的一些细节:注意本例中的优

自定义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

Android--简单的三级菜单

  关于这个菜单应该在很多播放器应用里面可以看见,直接先上两张效果图吧,一张是该Demo的效果图,一张是优酷手机客户端的效果图.                                                         DEMO的效果图                                                                   优酷手机客户端界面 因为没有时间去自己制作图标,所以Demo里面采用的就是优酷手机客户端里的图标了. 一.布