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相关推荐

  1. Android自定义控制(五)仿新浪微博的下拉刷新

    网上有很多很有名的开源框架,这里就来拉拉PullToRefresh这个框架,也就是我们平时用的下拉刷新啦,当然你问我这个有什么用啊?别人已经写好了,这里主要是学习以及练习,练习的次数多了,一切就顺其自 ...

  2. android 自定义取色器,【Android自定义View】仿Photoshop取色器ColorPicker(二)

    ColorPicker 一款仿Photoshop取色器的Android版取色器. 前言 上一篇已经简单介绍了ColorPicker的项目结构以及两种颜色空间,接下来我们详细解析一下ColorPicke ...

  3. ios控制中心android版,控制中心iOS13

    控制中心iOS13让你用上iphone上面的控制中心,苹果上面的控制中心一直都是一个非常具有亮点的地方,它的操作方式非常的人性化得到不少用户的喜爱,而这款软件能够为你带来相同的控制中心,感兴趣的话就快 ...

  4. Android自定义view之仿支付宝芝麻信用仪表盘 ---by ccy

    自定义view练习 仿支付宝芝麻信用的仪表盘 对比图: 首先是自定义一些属性,可自己再添加,挺基础的,上代码 <?xml version="1.0" encoding=&qu ...

  5. 自定义xy组 android,Android自定义view之仿支付宝芝麻信用仪表盘示例

    自定义view练习 仿支付宝芝麻信用的仪表盘 对比图: 首先是自定义一些属性,可自己再添加,挺基础的,上代码 接着在构造方法里初始化自定义属性和画笔: private void initAttr(At ...

  6. 名片夹android布局代码,Android自定义布局实现仿qq侧滑部分代码

    自定义布局实现仿qq侧滑部分Android代码,供大家参考,具体内容如下 实现说明: 通过自定义布局实现: SlidingLayout继承于 HorizontalScrollView /** * Cr ...

  7. Android自定义View之仿QQ运动步数进度效果

    文章目录 前言 先看效果图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6e4ddec17933496ea4830fa08d8ffbe5.png?x-oss-pr ...

  8. Android自定义View分享——仿微信朋友圈图片合并效果

    写在前面 笔者近来在学习Android自定义View,收集了一些不算复杂但又"长得"还可以的自定义View效果实现,之前分享过两个效果:一个水平的进度条,一个圆形温度显示器,如果你 ...

  9. Android自定义View分享——仿网易云音乐留声机效果

    写在前面 这是笔者自学习自定义View以来,分享的第五篇效果,之前分享过一篇动态时钟效果的自定义View,如果有兴趣的可以看看: Android自定义View分享--一个时钟 之前的博客笔者一般都会说 ...

最新文章

  1. python使用fpdf创建页眉、页脚并嵌入图片
  2. java tomcat源码_详解Tomcat系列(一)-从源码分析Tomcat的启动
  3. linux怎么在线安装gcc,Linux 在线安装软件 gcc在线安装的操作方法
  4. 指数函数中x的取值范围_基本初等函数I: 指数函数、对数函数和幂函数
  5. ActiveMQ RabbitMQ KafKa对比
  6. 知行合一!如何做好项目经理?
  7. Csico CCNA学习笔记1_cdp telnet
  8. Telnet命令检测远程主机上的端口是否开启
  9. (转)Vsdocman7.2 注册版
  10. FastReport 数据区二级显示
  11. Gradle Eclipse插件教程
  12. 怎么将php文件改成web的servlet文件_遇到喜欢的网站怎么才能高效收藏整理
  13. 广东电网公司大数据平台初步建成
  14. Mac软件下载提示:“已损坏,无法打开”解决办法
  15. 一起读slam论文之PTAM-Parallel Tracking and Mapping for Small AR Workspace
  16. 一款优雅的消息提示插件Message.js
  17. laravel的pluck用法
  18. 阿里云RDS数据库如何远程访问
  19. 阿里巴巴开源力作(二)--分布式流量卫兵Sentinel简介及控制台安装
  20. 机场航班信息显示系统

热门文章

  1. rockniu@live.com是我的MSN帐号,欢迎朋友们加我探讨技术.
  2. Google 面临来自欧盟和美国的新的隐私纠察
  3. 工作一周年,总结了面试最火的183个面试问题和答案(建议收藏)二
  4. 陌陌上市,为移动互联网划上句号
  5. 模板_单调栈_AcWing_830. 单调栈_底顶递增栈
  6. 从枪械进化来聊聊大数据计算查询的两把高性能利刃
  7. 看透Spring MVC源代码分析与实践 !
  8. 游戏行业实战案例5:玩家在线分布
  9. 最常用英语口头禅[推荐]
  10. Docker - Docker Vagrant 区别与联系(一)