1. 程式人生 > >使用xposed更改掘金的側滑退出的觸發範圍(左撇子,掘金的這個側滑退出的體驗一言難盡)

使用xposed更改掘金的側滑退出的觸發範圍(左撇子,掘金的這個側滑退出的體驗一言難盡)

緣由

由於個人是左撇子,用左手玩手機居多,刷掘金的時候,因為掘金的側滑退出的範圍是在太大,個人手機x軸上觸發範圍超過200px,上下滑動詳情介面,經常同時觸發滑動回退,實講,體驗非常差。

操作

1.定位程式碼位置

掘金用了樂加固,直接用apktool無法解出來,脫殼之類的操作,我也還沒接觸過,所以這裡直接在xposed上找了個直接可以更改應用為除錯模式(android:debuggable="true")的外掛,然後使用androidstudio自帶的 Profiler的cup板塊,錄製一個執行(我的手機還是7.0)

搜尋事件相關的幾個方法,因為這個滑動事件是在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); }) 複製程式碼

通過以上程式碼也就簡單的實現縮小側滑觸發範圍的功能。

終語

其實也向掘金提出過這個側滑的問題,當然到目前為止的版本都沒有調整,這裡操作只是為了方便個人的使用。