使用xposed更改掘金的侧滑退出的触发范围(左撇子,掘金的这个侧滑退出的体验一言难尽)

原因

因为我的是左撇子,用左手玩手机居多,刷掘金的时候,由于掘金的侧滑退出的范围是在太大,我的手机x轴上触发范围超过200px,上下滑动详情界面,常常同时触发滑动回退,实讲,体验很是差。android

操做

1.定位代码位置

掘金用了乐加固,直接用apktool没法解出来,脱壳之类的操做,我也还没接触过,因此这里直接在xposed上找了个直接能够更改应用为调试模式(android:debuggable="true")的插件,而后使用androidstudio自带的 Profiler的cup板块,录制一个执行(个人手机仍是7.0)bash

搜索事件相关的几个方法,由于这个滑动事件是在onTouchEvent中处理的,因此咱们能够经过onInterceptTouchEvent来控制拦截(若是用dispatchTouchEvent来处理滑动事件,就不太好弄了~)

2.xposed 大法

Class c = XposedHelpers.findClass("im.juejin.android.base.views.swipebacklayout.SwipeBackLayout"
                , lpparam.classLoader);
        XposedHelpers.findAndHookMethod(c, "onInterceptTouchEvent",
            MotionEvent.class
            , new XC_MethodHook() {
              @Override
              protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                super.beforeHookedMethod(param);
              }

              @Override
              protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                if (param != null && param.args[0] instanceof MotionEvent) {
                  // 获取onInterceptTouchEvent的参数
                  MotionEvent me = (MotionEvent) param.args[0];
                  // thisObject就是SwipeBackLayout也就是View,因此这里直接经过getContext获取context
                  Context context = ((View) param.thisObject).getContext();

                  if (me.getX() < ViewConfiguration.get(context).getScaledEdgeSlop()) {
                    super.afterHookedMethod(param);
                    return;
                  }
                }
                param.setResult(false);
            })    

复制代码

经过以上代码也就简单的实现缩小侧滑触发范围的功能。ide

终语

其实也向掘金提出过这个侧滑的问题,固然到目前为止的版本都没有调整,这里操做只是为了方便我的的使用。ui

相关文章
相关标签/搜索