IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Android Launcher负一屏实现方案 -> 正文阅读

[游戏开发]Android Launcher负一屏实现方案

Android Launcher负一屏实现方案@TOC

  1. 整体方案:
    利用Google Feed屏方案, 基于Google定义的ILauncherOverlay和 ILauncherOverlayCallback两个接口,通过AIDL通信方式实现。 Launcher作为客户端, 负一屏是独立的应用作为服务端。
    Launcher将其Activity的window属性和滑动信息传递给应用端。应用端根据Launcher窗口属性创建一个相同属性的窗口,以WindowManager.addView方式添加此浮动窗口,并根据Launcher传递过来的滑动信息,用translationX改变负一屏View的位置来实现窗口的顺势进入显示区和滑出显示区的效果。

  2. 方案有缺点:
    缺点:实现复杂,需要应用自己实现View显示滑动等处理。
    优点:与Launcher解构,虽然负一屏的显示依赖launcher的activity的token,但运行在独立的进程中,不影响Launcher性能。

  3. 具体实现过程:
    客户端Launcher的实现:
    1)客户端实现ILauncherOverlayCallback接口。
    在这里插入图片描述

  • 接口函数overlayScrollChanged由服务端回调,参数为服务端窗口的移动进度,launcher根据此值让workspace做相应的translationX,达到和应用负一屏窗口联动的功能。
  • 接口函数overlayStatusChanged由服务端回调,通知Launcher端,服务端的Overlay的状态,1-表示状态已打开, 0-表示已关闭。状态打开时, Launcher要对应处理overlayScrollChanged的滑动过程。
    2)Launcher在onAttachedToWindow的时候,会通过windowAttached(WindowManager.LayoutParams attrs, ILauncherOverlayCallback callbacks, int options)方法,将Launcher的Activity的window属性,和launcher实例化出来的ILauncherOverlayCallback.Stub回调传给服务端。
    Sample code:
WindowManager.LayoutParams lp = getWindow().getAttributes();
windowAttached(lp, loverlayCb, 0);

3)用户在屏幕的滑动操作, 调用startScroll(), onScroll(float progress), endScroll()来通知服务端。
4)Launcher这边打开关闭负一屏,用openOverlay(),closeOverlay()来通知服务端。
5)Launcher 在onResume(), onPause()时通知服务端, 以保证Launcher和服务端同步生命周期。

服务端App的实现:
1)应用端创建一个服务,实现ILauncherOverlay接口。接口功能主要实现以下函数:
在这里插入图片描述
2)在客户端调用服务端的windowAttached的时候,创建一个Window, 将客户端的LayoutParams中的部分属性赋值给服务端的window。
在这里插入图片描述
到此,就可以在launcher的上层显示一个负一屏的window了,如果不给负一屏容器设置一个translationX的话,默认该window是盖在launcher上的,可以通过设置translationX的默认值将其默认显示在屏幕以外。
3)服务端接收到onScroll(float progress)传过来的scroll值,来改变负一屏window中的view的translationX,来达到负一屏滑动的效果。
4)服务端接收到客户端的closeOverlay和openOverlay时,也要对应处理负一屏的显示与隐藏。比如Launcher端执行onNewIntent()时,会调用closeOverlay来进行Launcher主页面的显示,并隐藏负一屏。
5)服务端window上的View需要处理onTouchEvent事件,判断滑动距离,计算滑动进度,要通过ILauncherOverlayCallback接口将滑动进度回调给Launcher,以达到Launcher与负一屏联动效果。
比如,如果是以dialog形式创建的窗口,需要自定义类继承Dialog,重写onTouchEvent函数, 来处理滑动事件过程。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 22:03:23  更:2021-11-14 22:03:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 22:39:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码