3.ClippedImageView–屏幕左右移动按钮,正常图标很小,你只能看到小点,我设置view背景不透明为绿色如前面我的截图

ClippedImageView要注意三点,

–1.桌面左右移动时Drawable的变换,变换图标列表可查看home_arrows_right.xml

,ClippedImageView通过把drawable传递给worksapce,当桌面切换时通过调用Drawable.setLevel函数实现不同图标显示。

–2.点击ClippedImageView实现左右桌面切换,查看ClippedImageView的布局文件

android:onClick=“previousScreen”,该属性定义了一个ClippedImageView onClick事件响应函数,函数在布局文件对应的Activity中定义

也就是在Launcher.java中定义

/**

* @Description:用户点击前一个桌面按钮

* @param v

*

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

@Others:

*/

@SuppressWarnings({“UnusedDeclaration”})

public void previousScreen(View v) {

if (!isAllAppsVisible()) {

mWorkspace.scrollLeft();

}

}

–3.在ClippedImageView初始化(Launcher.setupViews)中添加了长按事件OnLongClickListener有当长按ClippedImageView,会执行

launcher.onlongclick方法,方法执行显示5个桌面的预览微缩图显示,具体实现不做深入说明,后面将作深入研究。

4.RelativeLayout–android:id="@+id/all_apps_button_cluster",如前面截图右边灰色竖状条,它是一个相对布局对象,上面承载了三个view

中间是一个HandleView,是一个进入allappview的按钮,HandleView的上下都是一个进入google搜索的imageview

–HandleView

–1.点击事件 传递给Launcher.onClick进行处理 显示应用菜单view

–2.长按事件 传递给Launcher.onLongClick进行处理,方法执行显示5个桌面的预览微缩图显示

–google搜索的imageview

–onClick响应:android:onClick=“launchHotSeat”

5.AllApps2D – 菜单view,在launcher.xml中引用的是:

<include

layout="@layout/all_apps" />

all_apps.xml定义如下:

中间增加了一个层次,如果有需要可以定义自己的apps_3d布局

AllApps2D包括两个view

–1.GridView android:id="@+id/all_apps_2d_grid" 应用菜单grid view 它是一个grid view 用来放应用图标

GridView对应的Adapter实现类是AppsAdapter,对应的Adapter布局文件是:application_boxed.xml

–2.view android:id="@+id/all_apps_2d_home" 应用菜单view右边的home按钮 ,点击隐藏 AllApps2D

6.Workspace–用户桌面包括5个workspace_screen,默认显示的是:launcher:defaultScreen=“0”

workspace继承了viewgroup,5个workspace_screen作为它的child,值得注意它只接收CellLayout类型的child,workspace重写了addview函数,

添加非CellLayout的child将抛异常

–Workspace长按事件仍由launcher.onLongClick来监听

–Workspace实现了DropTarget, DragSource两个接口,意味着Workspace既是拖放源,又是拖放目的地

–Workspace实现DragScroller接口,DragScroller接口提供两个方法

void scrollLeft();

void scrollRight();

在拖放过程被DragController调用实现桌面的左右滚动

–CellLayout Workspace下的一个桌面布局,CellLayout也是ViewGroup的子类,上面我的桌面截图红色区域就是CellLayout

Workspace下有5个CellLayout顺序排列,Workspace下布局文件:android:scrollbars="horizontal"决定了5个CellLayout排列是横向还是纵向的

CellLayout被划分成不同的cell空间,并使用boolean[][] mOccupied;来标识每个cell是否被占用,先看CellLayout的布局文件workspace_screen.xml:

<com.android.launcher2.CellLayout

xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:launcher=“http://schemas.android.com/apk/res/com.android.launcher”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:hapticFeedbackEnabled=“true”

launcher:cellWidth=“115dip”//每一个cell的宽度

launcher:cellHeight=“100dip”//每个cell的高度

launcher:longAxisStartPadding=“0dip”//cell距离父view CellLayout左边距

launcher:longAxisEndPadding=“0dip”//cell距离父view CellLayout右边距

launcher:shortAxisStartPadding=“0dip”//cell距离父view CellLayout上边距

launcher:shortAxisEndPadding=“80dip”//cell距离父view CellLayout下边距

launcher:shortAxisCells=“3”//对横屏来说表示CellLayout cells行数

launcher:longAxisCells=“5”//对横屏来说表示CellLayout cells列数

android:background="#FF0000">

</com.android.launcher2.CellLayout>

当纵向的控件不够cells排列时,cell将产生重叠,横向不产生重叠,横向每个cell间隔至少为0

–CellLayout覆盖重新实现了onMeasure方法,和onlayout方法,它限定了child view 使用的布局参数类型为CellLayout.LayoutParams因此企图通过修改

workspace_screen.xml来改变它的桌面布局是不会得以成功的,你必须修改CellLayout类

–CellLayout.LayoutParams说明,CellLayout.LayoutParams下有几个成员需要说明一下

–cellX:该child view占用的第几列的cell(若横向占用多个cell,表示最左边的cellx)

–cellY: 该child view占用的第几行的cell(若纵向占用多个cell,表示最上边的celly)

–cellHSpan:横向跨越的列数

Android Launcher——ui框架,android混合开发专利相关推荐

  1. android Launcher——ui框架

    着手开发laucher 我个人觉得首先要从ui框架入手,了解清楚了ui框架对laucher就有了一个大致的了解,知道关键的几个类在哪里,对后面进一步深入地研究作出铺垫.废话不多说了,直接进入主题: 1 ...

  2. Android原生集成MUI框架进行混合开发

    开发APP中我们经常进行原生结合H5进行混合开发,下面将进行详细讲解Android原生集成MUI框架进行混合开发(项目Demo如下,有需要的可以下载查看),下一篇讲述,Android原生和MUI(也适 ...

  3. android原生组件,XUI: 一个简洁而优雅的Android原生UI框架,解放你的双手!

    XUI 一个简洁而又优雅的Android原生UI框架,解放你的双手!还不赶紧点击使用说明文档,体验一下吧! 涵盖绝大部分的UI组件:TextView.Button.EditText.ImageView ...

  4. Android常用ui,XUI: 一个简洁而优雅的Android原生UI框架,解放你的双手!

    XUI 一个简洁而又优雅的Android原生UI框架,解放你的双手!还不赶紧点击使用说明文档,体验一下吧! 涵盖绝大部分的UI组件:TextView.Button.EditText.ImageView ...

  5. android炫酷叼ui,XUI: 一个简洁而优雅的Android原生UI框架,解放你的双手!

    XUI 一个简洁而又优雅的Android原生UI框架,解放你的双手!还不赶紧点击使用说明文档,体验一下吧! 涵盖绝大部分的UI组件:TextView.Button.EditText.ImageView ...

  6. 分享两个超实用的Android开源UI框架——QMUI和XUI

    目录 QMUI_Android 功能特性 全局 UI 配置 丰富的 UI 控件 高效的工具方法 功能列表 支持 Android 版本 使用方法 QMUI Demo APP 安装包下载 XUI 特征 演 ...

  7. android ui风格 车载,XUI: 一个简洁而优雅的Android原生UI框架,解放你的双手!

    XUI 一个简洁而又优雅的Android原生UI框架,解放你的双手!还不赶紧点击使用说明文档,体验一下吧! 涵盖绝大部分的UI组件:TextView.Button.EditText.ImageView ...

  8. android 酷炫编辑框_25个实用酷炫的Android开源UI框架

    最近找了一些合适开源控件,这样在日常工作中会更加省时,再此分享给大家,希望能对大家有帮助,此博文介绍的都是UI上面的框架,接下来会有其他的开源框架(如:HTTP框架.DB框架). 1.Side-Men ...

  9. android调用flutter aar_Flutter原生混合开发

    混合开发简介 使用Flutter从零开始开发App是一件轻松惬意的事情,但对于一些成熟的产品来说,完全摒弃原有App的历史沉淀,全面转向Flutter是不现实的.因此使用Flutter去统一Andro ...

  10. Android 开源UI框架汇总

    1. github排名 https://github.com/trending,github搜索:https://github.com/search 2.https://github.com/wasa ...

最新文章

  1. zookeeper快速入门——部署
  2. 橘子CPS联盟操作手册2021.09
  3. 德国科学院院士:传统企业寻求变革,向智能制造靠近
  4. 我们也可以从学习中获得快乐 ------稻盛和夫
  5. 可以用for循环直接删除ArrayList的特定元素吗?可能会出现什么问题?怎样解决?
  6. NR 5G 密钥与安全详解
  7. python基础面试题整理---从零开始 每天十题(04)
  8. 数据结构学习笔记(四):重识数组(Array)
  9. c#sort升序还是降序_被玩坏的数组排序之sort函数
  10. php自动维护,完全禁用关闭Windows Server 2012R2自动维护功能禁用WIN2012R2自动维护
  11. oracle一页显示15行,oracle rownum分页与显示记录小测
  12. mongodb和mysql的对比_MongoDB和MySQL的区别
  13. ZeroMQ--使用jzmq进行编程
  14. UI版式设计模板,这样做才高级!
  15. lucene的Query类型
  16. 《测试类职位面试360度》
  17. x86基础之数与数据类型
  18. Ubuntu下替换软件列表
  19. 巧用变量代换求极限 高数
  20. 利用python做一个超简单的抽签器

热门文章

  1. 联想网络同传的工作日志
  2. idea安装python 插件_IntelliJ IDEA安装运行python插件方法
  3. 人人商城APP打包教程
  4. 凸包算法-流程及代码简述
  5. Java思维导图(七)
  6. matlab程序转成可执行文件,matlab程序如何生成可执行文件
  7. Linux软件安装到哪个目录
  8. sony android电视软件,Sony TV Remote app
  9. a form 出口享惠情况_进出口报关
  10. winscp连接Linux步骤