Android编程实现仿优酷圆盘旋转菜单效果的方法详解【附demo源码下载】

Android编程实现仿优酷圆盘旋转菜单效果的方法详解【附demo源码下载】,第1张

概述本文实例讲述了Android编程实现仿优酷圆盘旋转菜单效果的方法。分享给大家供大家参考,具体如下:

本文实例讲述了AndroID编程实现仿优酷圆盘旋转菜单效果的方法。分享给大家供大家参考,具体如下:

目前,用户对安卓应用程序的UI设计要求越来越高,因此,掌握一些新颖的设计很有必要.

比如菜单,传统的菜单已经不能满足用户的需求. 其中优酷中圆盘旋转菜单的实现就比较优秀,这里我提供下我的思路及实现,仅供参考.

该菜单共分里外三层导航菜单.可以依次从外向里关闭三层菜单,也可以反向打开,并且伴有圆盘旋转的动画效果

首先,看下效果:

以下是具体的代码及解释:

1. 菜单布局文件:

大家看到主要有三个RalativeLayout,就是大家看到的三层,但是关于图片的倾斜 是怎样实现的呢?实际上是个假象,图片是正放的,里面图像是倾斜的

<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"  xmlns:tools="http://schemas.androID.com/tools"  androID:layout_wIDth="fill_parent"  androID:layout_height="fill_parent" >  <relativeLayout    androID:layout_wIDth="100dip"    androID:layout_height="50dip"    androID:layout_alignParentBottom="true"    androID:layout_centerHorizontal="true"    androID:background="@drawable/level1" >    <Imagebutton      androID:ID="@+ID/home"      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_centerInParent="true"      androID:background="@drawable/icon_home" />  </relativeLayout>  <relativeLayout    androID:layout_wIDth="180dip"    androID:layout_height="90dip"    androID:layout_alignParentBottom="true"    androID:layout_centerHorizontal="true"    androID:ID="@+ID/level2"    androID:background="@drawable/level2" >    <Imagebutton      androID:ID="@+ID/search"      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_alignParentBottom="true"      androID:layout_margin="10dip"      androID:background="@drawable/icon_search" />    <Imagebutton      androID:ID="@+ID/menu"      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_centerHorizontal="true"      androID:layout_margin="6dip"      androID:background="@drawable/icon_menu" />    <Imagebutton      androID:ID="@+ID/myyouku"      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_alignParentBottom="true"      androID:layout_alignParentRight="true"      androID:layout_margin="10dip"      androID:background="@drawable/icon_myyouku" />  </relativeLayout>  <relativeLayout    androID:layout_wIDth="280dip"    androID:layout_height="140dip"    androID:layout_alignParentBottom="true"    androID:layout_centerHorizontal="true"    androID:ID="@+ID/level3"    androID:background="@drawable/level3" >    <Imagebutton      androID:ID="@+ID/c1"      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_alignParentBottom="true"      androID:layout_marginBottom="6dip"      androID:layout_marginleft="12dip"      androID:background="@drawable/channel1" />    <Imagebutton      androID:ID="@+ID/c2"      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_above="@ID/c1"      androID:layout_marginBottom="12dip"      androID:layout_marginleft="28dip"      androID:background="@drawable/channel2" />    <Imagebutton      androID:ID="@+ID/c3"      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_above="@ID/c2"      androID:layout_marginBottom="6dip"      androID:layout_marginleft="8dip"      androID:layout_toRightOf="@ID/c2"      androID:background="@drawable/channel3" />    <Imagebutton      androID:ID="@+ID/c4"      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_centerHorizontal="true"      androID:layout_margin="6dip"      androID:background="@drawable/channel4" />        <Imagebutton      androID:ID="@+ID/c5"      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_above="@+ID/c6"      androID:layout_marginBottom="6dip"      androID:layout_marginRight="8dip"      androID:layout_toleftOf="@+ID/c6"      androID:background="@drawable/channel5" />        <Imagebutton      androID:ID="@+ID/c6"      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_above="@+ID/c7"      androID:layout_marginBottom="12dip"      androID:layout_marginRight="28dip"      androID:layout_alignParentRight="true"      androID:background="@drawable/channel6" />        <Imagebutton      androID:ID="@+ID/c7"      androID:layout_wIDth="wrap_content"      androID:layout_height="wrap_content"      androID:layout_alignParentBottom="true"      androID:layout_marginBottom="6dip"      androID:layout_marginRight="12dip"      androID:layout_alignParentRight="true"      androID:background="@drawable/channel7" />  </relativeLayout></relativeLayout>

2. MainActivity;

import androID.os.Bundle;import androID.app.Activity;import androID.vIEw.Menu;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.Imagebutton;import androID.Widget.relativeLayout;public class MainActivity extends Activity {  private Imagebutton home;  private Imagebutton menu;  private relativeLayout level2;  private relativeLayout level3;  private boolean isLevel2Show = true;  private boolean isLevel3Show = true;  @OverrIDe  public voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_main);    home = (Imagebutton) findVIEwByID(R.ID.home);    menu = (Imagebutton) findVIEwByID(R.ID.menu);    level2 = (relativeLayout) findVIEwByID(R.ID.level2);    level3 = (relativeLayout) findVIEwByID(R.ID.level3);    menu.setonClickListener(new OnClickListener() {      @OverrIDe      public voID onClick(VIEw v) {        if(isLevel3Show){          //隐藏3级导航菜单          MyAnimation.startAnimationOUT(level3,500,0);        }else {          //显示3级导航菜单          MyAnimation.startAnimationIN(level3,500);        }        isLevel3Show = !isLevel3Show;      }    });    home.setonClickListener(new OnClickListener() {      @OverrIDe      public voID onClick(VIEw v) {        if(!isLevel2Show){          //显示2级导航菜单          MyAnimation.startAnimationIN(level2,500);        } else {          if(isLevel3Show){            //隐藏3级导航菜单            MyAnimation.startAnimationOUT(level3,0);            //隐藏2级导航菜单            MyAnimation.startAnimationOUT(level2,500);            isLevel3Show = !isLevel3Show;          }          else {            //隐藏2级导航菜单            MyAnimation.startAnimationOUT(level2,0);          }        }        isLevel2Show = !isLevel2Show;      }    });  }}

3. 自定义动画类MyAnimation:

import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.vIEw.animation.Animation;import androID.vIEw.animation.Animation.AnimationListener;import androID.vIEw.animation.RotateAnimation;public class MyAnimation {  //入动画  public static voID startAnimationIN(VIEwGroup vIEwGroup,int duration){    for(int i = 0; i < vIEwGroup.getChildCount(); i++ ){      vIEwGroup.getChildAt(i).setVisibility(VIEw.VISIBLE);//设置显示      vIEwGroup.getChildAt(i).setFocusable(true);//获得焦点      vIEwGroup.getChildAt(i).setClickable(true);//可以点击    }    Animation animation;    /**     * 旋转动画     * RotateAnimation(fromdegrees,todegrees,pivotXType,pivotXValue,pivotYType,pivotYValue)     * fromdegrees 开始旋转角度     * todegrees 旋转到的角度     * pivotXType X轴 参照物     * pivotXValue x轴 旋转的参考点     * pivotYType Y轴 参照物     * pivotYValue Y轴 旋转的参考点     */    animation = new RotateAnimation(-180,Animation.relative_TO_SELF,0.5f,1.0f);    animation.setFillAfter(true);//停留在动画结束位置    animation.setDuration(duration);    vIEwGroup.startAnimation(animation);  }  //出动画  public static voID startAnimationOUT(final VIEwGroup vIEwGroup,int duration,int startOffSet){    Animation animation;    animation = new RotateAnimation(0,-180,1.0f);    animation.setFillAfter(true);//停留在动画结束位置    animation.setDuration(duration);    animation.setStartOffset(startOffSet);    animation.setAnimationListener(new AnimationListener() {      @OverrIDe      public voID onAnimationStart(Animation animation) {        // Todo auto-generated method stub      }      @OverrIDe      public voID onAnimationRepeat(Animation animation) {        // Todo auto-generated method stub      }      @OverrIDe      public voID onAnimationEnd(Animation animation) {        for(int i = 0; i < vIEwGroup.getChildCount(); i++ ){          vIEwGroup.getChildAt(i).setVisibility(VIEw.GONE);//设置显示          vIEwGroup.getChildAt(i).setFocusable(false);//获得焦点          vIEwGroup.getChildAt(i).setClickable(false);//可以点击        }      }    });    vIEwGroup.startAnimation(animation);  }}

这样,一个高仿优酷三级导航圆盘旋转菜单就完成了.,以后完全可以借鉴这些优秀的UI设计,甚至根据新的需求,可以做出更好的UI.

附:完整实例代码点击此处本站下载

更多关于AndroID相关内容感兴趣的读者可查看本站专题:《Android布局layout技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家AndroID程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Android编程实现仿优酷圆盘旋转菜单效果的方法详解【附demo源码下载】全部内容,希望文章能够帮你解决Android编程实现仿优酷圆盘旋转菜单效果的方法详解【附demo源码下载】所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1144915.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存