Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91368
  • 博文数量: 47
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 515
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-29 10:31
文章分类
文章存档

2014年(15)

2013年(32)

我的朋友

分类: Android平台

2013-11-18 09:37:15

说明

在最近的应用中,从屏幕左边滑动的菜单整变得越来越流行。本文展示了如何用TranslateAnimation类以一个简单的方式创建一个简单的菜单。

背景

首先需要理解TranslateAnimation类如何运行。它的构造函数接收四个参数。前两个与X坐标相关,后两个与Y坐标相关。

使用代码

你需要决定菜单相关内容的位置(如:菜单是否可见),我们可以用内容的左边缘和布尔运算来保持追踪它并决定哪个参数将被传给TransalteAnimation构建函数。

if(contentParams.leftMargin == -(menu.getLayoutParams().width)) { // Menu is hidden (slide out parameters) animateFromX = 0;
    animateToX = (menu.getLayoutParams().width);
    marginX = 0;
    menuOpen = true;
} else { // Menu is visible (slide in parameter) animateFromX = 0;
    animateToX = -(menu.getLayoutParams().width);
    marginX = -(menu.getLayoutParams().width);
    menuOpen = false;
}

为确保动画不恢复,内容左边缘位置需要做如下改变:

slide.setAnimationListener(new AnimationListener() { public void onAnimationEnd(Animation animation) { // Make movement of content permanent after animation has completed  contentParams.setMargins(marginX, 0, 0, 0); // by positioning its left margin  content.setLayoutParams(contentParams);
} public void onAnimationRepeat(Animation animation) { } public void onAnimationStart(Animation animation) { }
});

左边缘位置可以是0,或者是菜单宽度。菜单宽度由如下方式获取:

menu.getLayoutParams().width // this is an integer value

一旦参数被决定,如下定义函数将在菜单滑进或滑出时被调用。

兴趣点

最好是通过获取菜单宽度设置内容左边缘,而不是固定的整数值,这将避免不同设备屏幕尺寸不同的问题,还可以防止用户在尝试通过按住后退键隐藏菜单时意外关闭某应用程序。

public boolean onKeyDown(int keyCode, KeyEvent keyEvent) { if(keyCode == KeyEvent.KEYCODE_BACK) { if(menuOpen) { // Slide the menu back if visible and one does not wish to close app but slide it back slideMenuIn(0, -(menu.getLayoutParams().width), -(menu.getLayoutParams().width)); // Pass slide in paramters menuOpen = false; return true;
        }
    } return super.onKeyDown(keyCode, keyEvent);
}

点击下载源代码

阅读(464) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~