本文实例讲述了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源码下载】所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)