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. 苹果测试软件testflight游戏,苹果内测工具TestFlight的使用
  2. ML之SVM:基于Js代码利用SVM算法的实现根据Kaggle数据集预测泰坦尼克号生存人员
  3. vue如何取消下拉框按回车自动下拉_Web自动化测试 | Select下拉框
  4. 工作流实战_25_flowable 流程中的自动跳过
  5. Gremlin发布混沌工程实验平台免费版,开放了“故障即服务”功能
  6. 匿名内部类使用外面的类为什么要用final型
  7. Python人脸识别项目-基础代码
  8. Navicat操作数据库
  9. 小象学院python网课值得吗-2018最新小象学院Python数据分析视频教程升级版第2期...
  10. Mac删除Python缓存文件
  11. (五)具名和匿名挂载
  12. 一文读懂深度学习与机器学习的差异
  13. 光猫灯显示正常但是报651错误解决办法
  14. notepad++怎么解决光标变成下划线的问题?
  15. 使用c语言计算3阶行列式
  16. PMP 项目管理知识框架 - 引子
  17. 编程中的代码能看懂。。但是让自己写却写不出来。应该怎么办? 要有效果的方法...
  18. 2023年武汉理工大学能源动力(085800)考研上岸前辈备考经验指导
  19. 奥塔在线:在win10下安装Mysql
  20. CSS属性display的用法 display=

热门文章

  1. 数学趣题——谁在说谎
  2. 设计模式----原型模式
  3. 要塞悬垂堡任务+要塞资源
  4. 《Photoshop Lightroom5经典教程》—第1课1.3节Lightroom模块
  5. 用Linux Deploy在Android手机上安装Linux
  6. vue-cli脚手架安装的艰辛过程
  7. 计算机视觉大牛代季峰从商汤离职!加入清华大学电子系!
  8. 视频教程-Power Pivot商业智能数据分析(第1季 基础篇)-Office/WPS
  9. 视频教程-Excel软件初级入门-Office/WPS
  10. UGUI实现打字机效果