android之 Launcher改造仿桌面排版的效果

news2024/7/4 5:59:52

 一,背景

1.1 新接手一个灯光控制项目,其页面和效果还是比交复杂的,其中一个功能就是仿苹果桌面来排版灯具,支持拖拽,分组,分页。

拖动图标的时候判断是否空白位置还是已经有占位了,有的话就把两个图标合合为一个文件夹,同时还得判断是否是不同种类的灯具,则不能合并,是互斥的,会挤压原来位置的图标

1.2 可以看下需求排版效果

f799b2c68c674d36ad61ba4a01f95500.jpeg

dba47d2c3bb84220a7e834f76ee0d7e2.jpeg

1.3 方案:

这种效果关键在于宫格位置坐标和拖动位置的改变,可以把一个页面平等分为几个宫格,把宫格在页面的位置坐标记录下来,拖动图标松手的时候判断是否在某个宫格的范围内,在的话就让图标在这个宫格内居中显示

二,google原生桌面

2.1 既然让仿桌面那就找一套桌面程序参考一下

官方源码:

https://android.googlesource.com/platform/packages/apps/Launcher3/

github项目参考

https://github.com/luohaohaha/launcher3

2.2 google官方源码解析

桌面效果结构

689d962ac034437eaca4eb6edb2eb4d5.png

 2.3 项目目录结构

c029417b7b014f6483567dbf2dd866f1.png

2.4 重点类功能

LauncherModel:
跟数据有关系,保存了桌面运行时的状态信息,也提供了读写数据库的API,他有一个内部类LoaderTask,桌面启动从数据库中读取数据并把图标和小工具添加上去的时候用的就是他。

BubblTextView:
图标都是基于他,不过奇怪的是,他是继承自TextView

DragController:
DragLayer只是一个ViewGroup,具体的拖拽的处理都放到了DragController中。

LauncherAppState:
单例模式,主要在启动的时候用,他初始化了一些对象,并且注册了广播监听器和ContentObserver。

DragView:
在拖动图标的时候跟随手指移动的View就是他。

DragSource,DropTarget:
跟拖拽相关的接口,DragSource表示图标从哪里被拖出来,DropTarget表示图标可以被拖到哪里去。

Folder:
文件夹打开时候那个view。

FolderIcon:
文件夹图标。

LauncherProvider:
数据库类,Launcher3使用了SQLite,数据库文件保存在/data/data/包名/databases/launcher.db 下,有兴趣的同学可以把这个东西拷贝出来,用SQLite的工具看看里面都是怎么保存的。

ItemInfo:
运行时保存了桌面上每个项目的信息,包括图标在第几屏,第几行第几列,高度宽度等信息,每一个ItemInfo对象都对应着数据库中的一条记录。在Launcher3源码路径下,会有很多以Info结尾的类,这些类都是ItemInfo的子类,具体代表了桌面上的某个项目。比如说FolderIcon和FolderInfo是对应的,BubbleTextView和ShortcutInfo是对应的,AppWidgetHostView和LauncherAppWidgetInfo是对应的。有了对应关系,可以这样通过view获取ItemInfo对象:
ItemInfo info = (ItemInfo)bubbletextview.getTag();
这样这里的info其实就是ShortcutInfo对象了。

LauncherProvider:
桌面信息的ContentProvider。

LauncherSettings:
存了数据库相关的常量,字段名,字段常量等等。

DatabaseHelper:
LaucherProvider的内部类,继承自SQLiteOpenHelper,数据库表的创建就是在它的onCreate方法里完成的。

itemInfo:实体类

itemInfo类型:

小工具:AppWidget
快捷方式:应用图标
文件夹:Folder

itemInfo重要参数:

container:表明图标是放在哪里的,是放在Workspace还是Hotseat,还是文件夹里面的。如果是放在Workspace上的,那么值是LauncherSettings.Favorites.CONTAINER_DESKTOP,如果是放在文件夹里面的那么container的值就是文件夹FolderInfo的id。
cellX,cellY:表明所在屏幕的哪个位置,cellY表明第几行,cellX表明第几列。如果是小工具占用多行多列的情况,就记录他左上角的位置。
spanX,spanY:宽度和高度,快捷方式和文件夹宽高都是1,小工具的宽高就要看具体情况了。
title:标题,显示应用的名字,文件夹的名字,小工具的话就不需要这个属性了。
itemType: 数据库里保存的表明这个ItemInfo具体是哪种类型的ItemInfo,启动的时候好生成具体的ItemInfo子类对象。

三 改造

3.1 官方源码东西还是比较多的,把无用的都删掉或禁掉,只保留项目需要的功能,比如负一页,底部导航,搜索栏,上滑出现全部应用,禁止页面缩放,壁纸,小组件等

3.2 具体需要修改的地方文件

f52eb4ff66664f0bbf2c84a41076d349.png

四,集成到自己项目 

 4.1 上面布局改造完毕,该删删,该禁禁,下面就是替换成自己的数据源,项目种主要使用greenDao维护数据表,层级关系 项目 -> 分页 -> 灯具组 -> 灯具,这些是自定义数据

4.2 同时还有一个Cell单元格信息表保存有图标相关信息,图标坐标,颜色,名字,灯具群组id,分页id,灯具id,然后遍历Cell单元格数据,赋值给快捷图标信息ShortcutInfo,再把图标添加进桌面

下面是主要源码数据源绑定地方:

11a5a60ed04740369ea93d63f43ad59e.png1941f163d2e54c1fb65ce6e07abc3420.pngd0a03c188fe1406cac84c2b13fe55ce1.png

 4.3 源码效果图

d24599d3de6c462a8b3a9440c0c7178b.jpeg

 4.4 自定义效果

34da904c285c446c87797d48a84fa2ce.jpeg

 4.5 自定义效果源码链接,可以参考,里面东西都可以改,颜色,文字,排版

MyApplication/customerlauncher3 at master · Biekangdong/MyApplication · GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/458494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pikachu靶场-RCE

RCE漏洞概述 可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。 远程系统命令执行 命令执行漏洞(Command Execution)即黑客可以直接在Web应用中执行系统命令,从而获取敏感信息或者拿下shell权限 更…

Linux离线状态下安装cuda、cudnn、cudatoolkit

目录 1. 下载与安装说明2. CUDA安装3. cuDNN安装4. cudatoolkit安装5. 测试安装成功 1. 下载与安装说明 工具包下载地址 CUDA历史版本下载地址:https://developer.nvidia.com/cuda-toolkit-archivecuDNN历史版本下载地址:https://developer.nvidia.com/r…

logback日志框架集成方式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、logback是什么?二、使用步骤1.使用方式控制台输出配置文件输出配置html输出配置定期删除配置方式 总结 前言 提示:这里可以添加本文…

C++每日一练:最长递增区间 阿波罗的魔力宝石 投篮

文章目录 前言一、最长递增区间二、阿波罗的魔力宝石三、投篮总结 前言 今天的题太简单,甚至 “最长递增区间” 和 “投篮” 就是一个问题。实在没事干,也给做了!直接上代码算了… 提示:以下是本篇文章正文内容 一、最长递增区间…

LSSANet:一种用于肺结节检测的长、短切片感知网络

文章目录 LSSANet: A Long Short Slice-Aware Network for Pulmonary Nodule Detection摘要方法Long Short Slice GroupingLong Short Slice-Aware Network 实验结果 LSSANet: A Long Short Slice-Aware Network for Pulmonary Nodule Detection 摘要 提出了一个长短片感知网…

【JAVA程序设计】(C00130)基于SpringBoot的社区养老医疗综合服务系统

基于SpringBoot的社区养老医疗综合服务系统 项目简介项目获取开发环境项目技术运行截图 项目简介 基于基于SpringBoot的社区养老医疗综合服务系统共分为三个角色:系统管理员、医生、用户 管理员角色包含以下功能: 用户管理、角色管理、部门管理、字典管…

【Java EE】-JavaScript详解

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【JavaEE】 分享: 且视他人如盏盏鬼火,大胆地去走你的道路。——史铁生《病隙碎笔》 主要内容:HTML中引入JS的三种方式。JS语法分析,JS是动态弱…

【Linux高级篇】什么是shell脚本,什么是shell变量

目录 🍁什么是shell 🍂什么是shell脚本 🍂shell脚本能做什么 🍂学习shell需要哪些知识 🍂shell基本规范 🍂shell脚本五种运行方式 🍁shell变量 🍂变量命名规范 🍂shell变…

远程登录--SSH 你值得拥有

目录 一:SSH服务详解 1.什么是SSH 2.SSH服务认证类型 1)基于口令认证 2)基于密钥认证 3.SSH安装 二: 配置ssh服务端 1.ssh配置文件 2. ssh配置文件主要条目介绍 三:使用ssh客户端程序 1.使用ssh命令远程登录 ​2.使用scp远程复制 …

8086汇编之DIV除法指令

2023年4月22日,周六晚上。 今晚写汇编作业的时候,遇到了DIV指令,于是把学到的知识记录成一篇博客。此外,刚刚已经写了一篇关于MUL指令的博客了。 除数有8位和16位种,存放在寄存器或者内存中。 当除数为8位&#xff1a…

Linux离线状态下的Anaconda安装与Python环境创建

1 下载与安装说明 下载 下载地址:https://repo.anaconda.com/archive/版本:此处以版本为2020.11的anaconda作示例,其携带的python版本为3.8.5。下载:在上述链接查找下载 Anaconda3-2020.11-Linux-x86_64.sh 文件,也可以…

时序预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测

时序预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测 目录 时序预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络时间序列预测 基于鲸鱼…

图论-匈牙利算法学习

本文讲述的是匈牙利算法,即图论中寻找最大匹配的算法。解决的问题是从二分图中找到尽量多的匹配。 原题-华为-HJ28 素数伴侣 描述 题目描述 若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用…

【Vue】学习笔记-初始化脚手架

初始化脚手架 初始化脚手架说明具体步骤脚手架文件结构 初始化脚手架 说明 Vue脚手架是vue官方提供的标准化开发工具(开发平台)最新版本是4.x文档Vue CLI 具体步骤 如果下载缓慢请配置npm淘宝镜像 npm config set registry http://registry.npm.taoba…

有关态势感知(SA)的卷积思考

卷积是一种数学运算,其本质是将两个函数进行操作,其中一个函数是被称为卷积核或滤波器的小型矩阵,它在另一个函数上滑动并产生新的输出。在计算机视觉中,卷积通常用于图像处理和特征提取,它可以通过滤波器对输入图像进…

《Spring MVC》 第六章 MVC类型转换器、格式化器

前言 介绍MVC类型转换器、格式化器 1、使用场景 <form th:action"{/user/register}" method"post">用户名&#xff1a;<input type"text" name"userName"/><br/>密码&#xff1a;<input type"password&q…

对于Ubuntu服务器杀毒的一次记录

概述&#xff1a;叮咚&#xff01;您的主机有异常登录地&#xff0c;登录ip来自人类文明的标杆美丽国的加利福尼亚州&#xff0c;请注意排查。可恶的老美啊&#xff0c;又来入侵我华夏主机了&#xff0c;美帝亡我之心不死啊&#xff08;当然也有可能是境内中国人通过VPN操作境外…

【搭建博客】宝塔面板部署Typecho博客,并发布上线访问

目录 前言 1.安装环境 2.下载Typecho 3.创建站点 4.访问Typecho 5.安装cpolar 6.远程访问Typecho 7.固定远程访问地址 8.配置typecho 前言 Typecho是由type和echo两个词合成的&#xff0c;来自于开发团队的头脑风暴。Typecho基于PHP5开发&#xff0c;支持多种数据库&…

让chatgpt给我做个项目预算,感觉这样的项目预算才有的赚

访问入口来自于以下网站&#xff1a; 无极低码-三维可视化,免费资源下载,气象数据,编程技术,java开发,素材下载,大数据,解决方案,方案,ppt,5G,数字孪生三维可视化,免费资源下载,气象数据,编程技术,java开发,素材下载,大数据,解决方案,方案,ppt,5G,数字孪生https://wheart.cn/ …

分享几个国内免费的ChatGPT镜像网址(亲测有效-4月25日更新)

最近由于ChatGPT的爆火也让很多小伙伴想去感受一下ChatGPT的魅力&#xff0c;那么今天就分享几个ChatGPT国内的镜像网址&#xff0c;大家可以直接使用&#xff01;记得点赞收藏一下呦&#xff01; 1、AQ Bot&#xff0c;网址&#xff1a;点我 https://su.askaiw.com/aq 缺点&…