`
李楚男
  • 浏览: 117273 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android Launcher——ui框架

 
阅读更多

android Launcher——ui框架

分类: android应用开发 3173人阅读 评论(19) 收藏 举报

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

1.先看图

这是我正在研究的一个800*480的launcher的ui框架图,对应的桌面显示效果如下:

下面一行应用是我修改桌面后的结果,在前面我的ui框架图中没有。
闲话不多说,下面就一一做出讲解
1.DragLayer--DragLayer继承FrameLayout,并在此基础上组合了DragController实现拖放功能,DragLayer主要监听下面两个用户事件
onInterceptTouchEvent
onTouchEvent
交给DragController进行处理,DragController根据是否在拖放中等信息控制控件拖放过程处理。
DragLayer 是Launcher这个activity的顶层view,Launcher2这个应用只有一个activity那就是Laucher.java

 

2.DeleteZone--打开launcher.xml,DeleteZone默认是不显示的android:visibility="invisible"
但是我们每次开始拖放图标的时候DeleteZone就显示了,它是怎么实现的呢?DeleteZone实现了DragController.DragListener接口,DragListener提供两个接口方法,
onDragStart:隐藏把手,显示DeleteZone
onDragEnd:显示把手,隐藏DeleteZone
分别在开始DragController开始拖放和结束拖放的时候被调用.
另外DeleteZone实现了DropTarget接口,一旦鼠标把图标拖放到DeleteZone,就会调用DeleteZone
实现的onDrop方法对应用图标进行删除处理。

 

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
     * @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定义如下:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <include layout="@layout/all_apps_2d" />
    <!--include layout="@layout/all_apps_3d" /-->
</merge>
中间增加了一个层次,如果有需要可以定义自己的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:横向跨越的列数
                --cellVSpan: 纵向跨越行数
                --isDragging:该child是否正在被拖动
                --regenerateId:是否重新生成view id

 

7.桌面图标的四种类型
ItemInfo--所有类型的父类
        --ApplicationInfo 应用图标项 应用菜单view中所有应用图标的数据表示
        --FolderInfo 桌面文件夹
                --UserFolderInfo 对应实现布局文件R.layout.folder_icon
                --LiveFolderInfo 对应实现布局文件R.layout.live_folder_icon
        --LauncherAppWidgetInfo 桌面组件
        --ShortcutInfo 应用快捷方式 对应实现布局文件R.layout.application

分享到:
评论
1 楼 j086924 2014-04-17  
good share!

相关推荐

    安卓Android源码——Android Launcher 源码修改可编译.zip

    "安卓Android源码——Android Launcher 源码修改可编译.zip" 这个标题表明我们关注的是Android操作系统的源代码,特别是与启动器(Launcher)相关的部分。Launcher是用户与Android系统交互的主要界面,它管理应用...

    安卓Android源码——安卓Android Launcher 桌面分页滑动代码.rar

    1. **Android UI框架**:在Android中,用户界面主要由View和 ViewGroup 组成。View是基本的UI元素,如按钮、文本框等,而ViewGroup则是布局容器,如线性布局、相对布局等。这里的TestPagedView可能是一个自定义的 ...

    安卓Android源码——高仿小米launcher(ZAKER)跨屏拖动item.zip

    通过研究这个源码,开发者不仅可以了解如何实现跨屏拖动item,还能深入理解Android UI框架的工作原理,提升对Android系统的整体认知。同时,这个过程也会锻炼开发者的问题解决能力,因为源码中可能会包含一些优化...

    安卓Android源码——MetroUI.zip

    【Android源码解析——探索MetroUI】 Android是一个开源的操作系统,其源码是开发者深入理解系统运作、定制个性化界面和优化应用性能的关键。本篇将深入探讨基于Android系统的MetroUI设计,这是一种借鉴了Windows ...

    安卓Android源码——仿Mac的Dock.zip

    在Android系统上,这种设计的实现需要对Android的用户界面框架有深入的理解。 【描述】描述中的"安卓Android源码——仿Mac的Dock.zip"表明这个项目主要关注于通过编程实现Android系统的Dock栏,以模仿Mac OS的用户...

    Android源码——高仿点心桌面皮肤源码.7z

    "Android源码——高仿点心桌面皮肤源码.7z" 是一个专为Android开发人员设计的资源,它包含了实现类似点心桌面(DianXin Launcher)皮肤效果的源代码。点心桌面是一款知名的第三方桌面应用,以其简洁美观的设计和丰富...

    Android源码——仿Mac的Dock.zip

    【Android源码——仿Mac的Dock.zip】是一个包含Android源代码的压缩包,其目标是实现一个类似于Mac操作系统的Dock栏效果。Dock栏在Mac OS中是一个重要的界面元素,它位于屏幕底部,显示常用的应用程序图标,用户可以...

    安卓Android源码——MyAppWeixin(仿微信界面).7z

    10. **UI动画**:使用Android的Animation框架或Lottie库实现过渡和交互动画,提升用户体验。 总的来说,这份源码为Android开发者提供了宝贵的学习机会,涵盖了从基础的界面设计到复杂的网络通信和数据管理等多个...

    安卓Android源码——安卓彩色图标.zip

    在Android框架层,`res/drawable`目录下存储了应用图标的资源文件,这些资源文件被编译到APK中,由Android运行时负责加载和渲染。对于彩色图标,颜色信息通常包含在PNG文件的像素数据中,而形状和结构则由XML矢量...

    Launcher2 AndroidStudio

    理解Launcher2的源码有助于开发者掌握Android UI框架、事件处理机制以及多线程编程。 2. **Android Studio**:Android Studio是Google为Android开发者提供的集成开发环境(IDE),集成了代码编辑、调试、构建工具和...

    基于Android的高仿小米launcher(ZAKER)跨屏拖动item.zip

    它模仿了小米手机的主屏幕启动器(launcher)功能,并且实现了ZAKER新闻应用的特色——跨屏拖动item。这意味着用户可以在不同的主屏幕之间通过拖放操作来移动应用程序快捷方式或小部件,增加了用户界面的互动性和...

    launcher

    在这个场景下,我们关注的可能是一个自定义的Android启动器——"android-launcher-plus"。这个项目可能是对原生Android启动器的增强或改进版本,旨在提供更丰富的功能或者优化用户体验。 从标签"源码"来看,我们...

    高仿小米launcher(ZAKER)跨屏拖动item.zip

    【标题】"高仿小米launcher(ZAKER)跨屏拖动item.zip" 提供的是一个针对Android平台的源码实现,其主要目标是模仿小米手机启动器(Launcher)中的一项功能——跨屏拖动item。在Android系统中,launcher是用户与手机...

    高焕堂android系统架构详细讲解

    《Android系统架构详解——高焕堂视角》 在Android领域,高焕堂先生是一位备受尊敬的专家,他的讲解深入浅出,对Android系统架构的剖析尤为透彻。本篇文章将根据高焕堂先生的观点,详细阐述Android系统的架构,旨在...

    android 开机启动源代码

    其中,SystemServer是Android框架层的核心,它负责处理系统级的任务,如UI管理、应用程序生命周期管理等。 Zygote进程是Android应用进程的父进程,它预先加载了大部分Android运行时库,减少了新进程创建时的启动...

    Android 通话模块来电和去电流程分析

    本文将深入剖析Android系统的通话模块,重点分析来电与去电的具体流程,包括从应用程序层面到框架层面的关键步骤和技术细节。 #### 二、拨出电话(语音电话)流程详解 拨出电话的过程涉及多个层次的交互,从用户...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    KivyLauncher-1.9.1.1.rar

    《KivyLauncher-1.9.1.1.apk》是一款基于Kivy框架的应用程序启动器,主要用于在Android设备上运行由Kivy开发的Python应用程序。Kivy是一个开源的、跨平台的Python库,专为创建多触点用户界面而设计,支持Windows、...

    Laucher页面

    首先,我们来看"Launcher页面"的核心功能——显示所有应用。在Android中,获取设备上所有安装应用的信息主要通过`PackageManager`类来实现。`getInstalledApplications()`或`getInstalledPackages()`方法可以获取到...

    面试总结android

    Android中的消息循环是处理UI更新等异步操作的基础。主要涉及到`Message`, `Handler`, `MessageQueue` 和 `Looper` 四个关键类: - **Message**: 消息实体类,用于封装要发送的数据。 - **Handler**: 负责发送和...

Global site tag (gtag.js) - Google Analytics