Android滑动菜单

说明

在最近的Android应用中,从屏幕左边滑动的菜单整变得越来越流行。本文展示了如何用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);
}

点击下载源代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值