说的够通俗易懂了吧,要改它,就要先找到它在哪里实现的。说实话这个还真不好找,网上有说:Android 10中手势导航为了xxx放到了Launcher中,然后通过AIDL和System UI交互。。。在Launcher中找了半天也没找到。
如果不是在Launcher中那就肯定在System UI中,一开始没有头绪,只能一(瞎)点(几)点(把)找。后来考虑到这个是拖拽效果,那就肯定跟触摸事件相关,本来想着在System UI的所有MotionEvent.ACTION_MOVE
处打断点,没想到在一个个添加断点的时候发现了EdgeBackGesturehandler.java
这个类,在其中打断了,调试果然命中了。
不过这个类是做控制用的,真正的绘制实现是在src/com/android/systemui/statusbar/phone/NavigationBarEdgePanel
里面。
NavigationBarEdgePanel
是一个自定义view,如下:
public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPlugin {
…
}
既然找到了地方,那就实现一下上下滑动吧。
2,实现上下移动
默认的那个箭头显示出来以后不会跟着手势上下移动,要实现上下移动就要先知道这个视图是怎么添加上去的。
首先看一下EdgeBackGesturehandler
,在其中初始化了NavigationBarEdgePanel
并且设置了WindowManager.LayoutParams
// 第一步:创建Panel
// Add a nav bar panel window
setEdgeBackPlugin(new NavigationBarEdgePanel(mContext));
// 第二步:设置LayoutParams
private void setEdgeBackPlugin(NavigationEdgeBackPlugin edgeBackPlugin) {
…
mEdgeBackPlugin = edgeBackPlugin;
// 设置返回回调
mEdgeBackPlugin.setBackCallback(mBackCallback);
// 设置LayoutParams
mEdgeBackPlugin.setLayoutParams(createLayoutParams());
updateDisplaySize();
}
这个类中并没有看到视图如何添加到屏幕上的。
那么再来看看NavigationBarEdgePanel
。
// 1,构造方法中获