分类: 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); }
点击下载源代码