android 仿IOS上滑打开工具栏,右滑退出返回上一个界面

android的工具栏是下滑打开,IOS的是上滑打开,项目有个需求要上滑打开工具栏。android下滑打开工具栏是根据手势判断,既然能判断下滑就能判断上滑,然后就到代码中找。

之前有修改过下拉栏的bug,滑动事件在frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java中,但是这里只能监听下滑过程中滑动事件,只能继续找。

android界面是显示在window中,window的管理是在PhoneWindowManager.java中,在PWM中的init()方法看到如下代码

mSystemGestures = new SystemGesturesPointerEventListener(context,
        new SystemGesturesPointerEventListener.Callbacks() {
            @Override
            public void onSwipeFromTop() {
                if (mStatusBar != null) {
                    requestTransientBars(mStatusBar);
                }
            }
            @Override
            public void onSwipeFromBottom() {
                if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_BOTTOM) {
                    requestTransientBars(mNavigationBar);
                }
            }
            @Override
            public void onSwipeFromRight() {
                if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_RIGHT) {
                    requestTransientBars(mNavigationBar);
                }
            }
            @Override
            public void onSwipeFromLeft() {
                if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_LEFT) {
                    requestTransientBars(mNavigationBar);
                }
            }
            @Override
            public void onFling(int duration) {
                if (mPowerManagerInternal != null) {
                    mPowerManagerInternal.powerHint(
                    PowerHint.INTERACTION, duration);
                }
            }
            @Override
            public void onDebug() {
                // no-op
            }
            @Override
            public void onDown() {
                mOrientationListener.onTouchStart();
            }
            @Override
            public void onUpOrCancel() {
                mOrientationListener.onTouchEnd();
            }
            @Override
            public void onMouseHoverAtTop() {
                mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS);
                Message msg = mHandler.obtainMessage(MSG_REQUEST_TRANSIENT_BARS);
                msg.arg1 = MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS;
                mHandler.sendMessageDelayed(msg, 500);
            }
            @Override
            public void onMouseHoverAtBottom() {
                mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS);
                Message msg = mHandler.obtainMessage(MSG_REQUEST_TRANSIENT_BARS);
                msg.arg1 = MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION;
                mHandler.sendMessageDelayed(msg, 500);
            }
            @Override
            public void onMouseLeaveFromEdge() {
                mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS);
            }
        });

通过方法名可以看出onSwipeFromTop()是下滑手势,onSwipeFromBottom()是上滑手势,onSwipeFromRight()是左滑手势,onSwipeFromLeft()是右滑手势,验证是不是理解正确,在每个方法中加上log,编译验证一下,验证的结果和预期的一样。现在修改需求就简单,在onSwipeFromBottom()中添加自己的逻辑即可。

延伸一下,IOS可以右滑返回上一个页面,右滑不就相当于点击返回按键吗,既然现在可以监听到右滑的手势,在onSwipeFromLeft()添加点击返回按键逻辑不就可以实现右滑返回上一个页面的功能吗,试验一下,确实可以这样实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值