android自定义控制中心仿vivo
android自定义仿vivo控制中心(一)
- (一)寻找全局可执行到的“点”
- 1.可以全局操作。
- 2.全局可用
- 提示
此功能是系列文章(主要是一下子写完太多了,有点费时间),本篇幅只写第一步剩下的以后有时间补上。
(一)寻找全局可执行到的“点”
首先明确需求:1,可以从屏幕下方向上滑动唤起(类似vivo)。2,可以全局操作,在任何界面都能唤起。3,有控制中心相应的功能。
本片主要讲述1和2。
1.可以全局操作。
首先我们的操作中心必须和原生的一样可以全局被唤醒,那么我们就来达成这个需求。
我们知道android的界面是在window中显示的,那么就从PhoneWindowManager.java这个window的管理类中看看有什么发现。
位置:frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
/*** The policy that provides the basic behaviors and states of a display to show UI.*/
public class DisplayPolicy extends AbsDisplayPolicy {/***省略*//** {@inheritDoc} */@Overridepublic void init(Context context, IWindowManager windowManager,WindowManagerFuncs windowManagerFuncs) {/***省略*/// monitor for system gestures// TODO(multi-display): Needs to be display specific.mSystemGestures = new SystemGesturesPointerEventListener(context,new SystemGesturesPointerEventListener.Callbacks() {@Overridepublic void onSwipeFromTop() {android.util.Log.d("MyLog","-----------onSwipeFromTop()-----------");if (mStatusBar != null) {requestTransientBars(mStatusBar);}}@Overridepublic void onSwipeFromBottom() {android.util.Log.d("MyLog","-----------onSwipeFromBottom()-----------");if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_BOTTOM) {requestTransientBars(mNavigationBar);if (mDynamicNavigationBar) {showNavigationBar(true, true); // SPRD: add for dynamic navigationbar}}}@Overridepublic void onSwipeFromRight() {if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_RIGHT) {requestTransientBars(mNavigationBar);if (mDynamicNavigationBar) {showNavigationBar(true, true); // SPRD: add for dynamic navigationbar}}}@Overridepublic void onSwipeFromLeft() {if (mNavigationBar != null && mNavigationBarPosition == NAV_BAR_LEFT) {requestTransientBars(mNavigationBar);if (mDynamicNavigationBar) {showNavigationBar(true, true); // SPRD: add for dynamic navigationbar}}}@Overridepublic void onThreePointerSwipe() {if (mStatusBar != null) {android.util.Log.i("lq", "onThreePointerSwipe TAKE_SCREENSHOT_FULLSCREEN");mScreenshotRunnable.setScreenshotType(TAKE_SCREENSHOT_FULLSCREEN);mHandler.post(mScreenshotRunnable);}}@Overridepublic void onFling(int duration) {if (mPowerManagerInternal != null) {// Sprd: Modify scene idmPowerManagerInternal.powerHint(PowerHintVendorSprd.POWER_HINT_VENDOR_INTERACTION_FLING, 2*duration);}scheduleBoostWhenTouch();}@Overridepublic void onDebug() {// no-op}@Overridepublic void onDown() {scheduleBoostWhenTouch();mOrientationListener.onTouchStart();}@Overridepublic void onUpOrCancel() {scheduleBoostWhenTouch();mOrientationListener.onTouchEnd();}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic void onMouseLeaveFromEdge() {mHandler.removeMessages(MSG_REQUEST_TRANSIENT_BARS);}});/***省略*/}//省略
}
可以发现在PhoneWindowManager.java中,根据名字发现onSwipeFromTop()和onSwipeFromBottom()很有可能就是顶端滑动和底部滑动所触发的事件,然后可以加上log验一下。
经过个人验证(log截图省略),这两个方法确实可以达到需求。
2.全局可用
在第一步里面PhoneWindowManager.java中的onSwipeFromTop()和onSwipeFromBottom()就可以做到全局可用。
经个人验证,确实可以全局触发(log截图省略)。
提示
以上内容基于android9,经个人研究发现在android10中onSwipeFromTop()和onSwipeFromBottom()并非在PhoneWindowManager.java中而是在DisplayPolicy.java文件中。
位置:frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java
android自定义控制中心仿vivo相关推荐
- Android自定义控制(五)仿新浪微博的下拉刷新
网上有很多很有名的开源框架,这里就来拉拉PullToRefresh这个框架,也就是我们平时用的下拉刷新啦,当然你问我这个有什么用啊?别人已经写好了,这里主要是学习以及练习,练习的次数多了,一切就顺其自 ...
- android 自定义取色器,【Android自定义View】仿Photoshop取色器ColorPicker(二)
ColorPicker 一款仿Photoshop取色器的Android版取色器. 前言 上一篇已经简单介绍了ColorPicker的项目结构以及两种颜色空间,接下来我们详细解析一下ColorPicke ...
- ios控制中心android版,控制中心iOS13
控制中心iOS13让你用上iphone上面的控制中心,苹果上面的控制中心一直都是一个非常具有亮点的地方,它的操作方式非常的人性化得到不少用户的喜爱,而这款软件能够为你带来相同的控制中心,感兴趣的话就快 ...
- Android自定义view之仿支付宝芝麻信用仪表盘 ---by ccy
自定义view练习 仿支付宝芝麻信用的仪表盘 对比图: 首先是自定义一些属性,可自己再添加,挺基础的,上代码 <?xml version="1.0" encoding=&qu ...
- 自定义xy组 android,Android自定义view之仿支付宝芝麻信用仪表盘示例
自定义view练习 仿支付宝芝麻信用的仪表盘 对比图: 首先是自定义一些属性,可自己再添加,挺基础的,上代码 接着在构造方法里初始化自定义属性和画笔: private void initAttr(At ...
- 名片夹android布局代码,Android自定义布局实现仿qq侧滑部分代码
自定义布局实现仿qq侧滑部分Android代码,供大家参考,具体内容如下 实现说明: 通过自定义布局实现: SlidingLayout继承于 HorizontalScrollView /** * Cr ...
- Android自定义View之仿QQ运动步数进度效果
文章目录 前言 先看效果图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6e4ddec17933496ea4830fa08d8ffbe5.png?x-oss-pr ...
- Android自定义View分享——仿微信朋友圈图片合并效果
写在前面 笔者近来在学习Android自定义View,收集了一些不算复杂但又"长得"还可以的自定义View效果实现,之前分享过两个效果:一个水平的进度条,一个圆形温度显示器,如果你 ...
- Android自定义View分享——仿网易云音乐留声机效果
写在前面 这是笔者自学习自定义View以来,分享的第五篇效果,之前分享过一篇动态时钟效果的自定义View,如果有兴趣的可以看看: Android自定义View分享--一个时钟 之前的博客笔者一般都会说 ...
最新文章
- 苹果测试软件testflight游戏,苹果内测工具TestFlight的使用
- ML之SVM:基于Js代码利用SVM算法的实现根据Kaggle数据集预测泰坦尼克号生存人员
- vue如何取消下拉框按回车自动下拉_Web自动化测试 | Select下拉框
- 工作流实战_25_flowable 流程中的自动跳过
- Gremlin发布混沌工程实验平台免费版,开放了“故障即服务”功能
- 匿名内部类使用外面的类为什么要用final型
- Python人脸识别项目-基础代码
- Navicat操作数据库
- 小象学院python网课值得吗-2018最新小象学院Python数据分析视频教程升级版第2期...
- Mac删除Python缓存文件
- (五)具名和匿名挂载
- 一文读懂深度学习与机器学习的差异
- 光猫灯显示正常但是报651错误解决办法
- notepad++怎么解决光标变成下划线的问题?
- 使用c语言计算3阶行列式
- PMP 项目管理知识框架 - 引子
- 编程中的代码能看懂。。但是让自己写却写不出来。应该怎么办? 要有效果的方法...
- 2023年武汉理工大学能源动力(085800)考研上岸前辈备考经验指导
- 奥塔在线:在win10下安装Mysql
- CSS属性display的用法 display=