• 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);
    }

    点击下载源代码

  • 相关阅读:
    使用pod install 出现bad interpreter: No such file or directory
    简单易用且功能丰富的纯Swift下载框架
    Swift主题色顶级解决方案一
    如何基于WKWebView开发一个功能完善的资讯内容页
    关于iPhone X 的适配
    iOS11及Xcode9适配问题汇总
    优豆云
    Mac 网站屏蔽修改
    c语言
    iOS 12 前台通知shouldAlwaysAlertWhileAppIsForeground崩溃问题
  • 原文地址:https://www.cnblogs.com/elegant-dancer/p/3428759.html
Copyright © 2020-2023  润新知