zoukankan      html  css  js  c++  java
  • launcher 分析

    2.draglayer.java:launcher layout的rootvie。draglayer现实上也是1个抽象的界面,用来措置惩罚拖动和对于事务举行开端措置惩罚然后按环境分发下去,脚色是1个controller。它起首用onintercepttouchevent(motionevent)来中途阻挡所有的touch事务,要是是长按item拖动的话不把事务传下去,直接交由ontouchevent()措置惩罚,如许就能够使成为事实item的移动了,要是否拖动item的话就把事务传到方针vie,交患上法针vie的事务措置惩罚函数做响应措置惩罚。如过有要对于事务的特殊需求的话可以修改onintercepttouchevent(motionevent)来使成为事实所需要的功效。

    12.launchersettings.java:字符串的界说。数值库项的字符串界说,别的在这搭界说了container的类型,另有itemtype的界说,除此另有一些特殊的idget(如search,clock的界说等)的类型界说。

    droptarget droptarget = finddroptarget((int) x, (int) y, coordinates);

    /**

    2) void ondragenter(dragsource source, int x, int y, int xoffset, int yoffset, object drag);

    launcherappidgethost , launcherappidgethostvie ,: idget 相干

    //记载前次的droptarget

    if (droptarget != null) {

    applicationsadapter : gridvie 的 adapter

    a.新增平凡的应用步伐快捷体式格局:

    1.将所有的应用都摆列在桌面上

    launcher:x="..." //放置x标的目的的位置(在列中的位置)

    b.要是该viegroup的onintercepttouchevent()在吸收到don事务措置惩罚完成然后return false,那末后续的move, up等事务将接续会先通报给该viegroup,然后才和don事务同样通报给终极的方针vie的ontouchevent()措置惩罚。

    }

    判断的法则如次:

    if (mlastdroptarget != null) {

    fastbitmapdraable :东西

    launcher: launcher 步伐的主窗户

    2.2 droptarget:可以放置被拖动的对于象的器皿。在launcher中有folder,orkspace,bottombar等,1个vie既可所以dragsource也可所以droptarget。首要包罗以下几个接口:

    bubbletextvie: 1个定制了的 textvie

    因为launcher的事务比力多比力庞大,所以在事务措置惩罚的时辰一般接纳rootvie先用onintercepttouchevent(motionevent)中途阻挡所有的touch事务,颠末判殿后分发给chelloldvie。

    orkspace的item的layout界说。

    livefolder , livefolderadapter , livefoldericon , livefolder : livefolder 相干

    函数的挪用标准样式为:

    }

    4) void ondragexit(dragsource source, int x, int y, int xoffset, int yoffset, object drag);

    10.livefolder.java:体系自带的文件夹。从体系中创立出的如接洽人的文件夹等。

    将所有的应用都摆列在桌面是路程经过过程起首创立1个三维的boolean型整个的局面:胸怀~数组来记载item的摆列环境,熬头维是屏数,第二维是纵向上的摆列环境,第三维是横向的摆列环境,要是阿谁位置被item所占用就标志为1,不然标志为0.在开始工作时把整个的局面:胸怀~数组初始化为0,然后在新增的时辰把响应的位置置1.通常有关到orkspace上item的变化,好比移动、新增、删去操作时都需要维护数组,连结数组的不错性,因为在安装新步伐时依据数组的状况去判断把item加到啥子位置。

    11.deletezone:删去框。在日常平凡是出于隐蔽状况,在将item长按拖动的时辰会预示出来,要是将item拖动到删去框位置特殊情况删去item。deletezone使成为事实了droptarget和draglistener两个接口。

    2、首要板块

    (int) mtouchoffsetx, (int) mtouchoffsety, mdrag);

    packagename和classname可以路程经过过程点这儿步伐,然后在打印出的log中找到p={...},例如如次信息:

    allpaperchooser :选择 allpaper 的 activity

    ondragenter是item被拖动步入到1个droptarget的时辰的回调。

    9.userfolder.java: 用户创立的文件夹。可以将item拖进文件夹,裸机时打开文件夹,长按文件夹上边标题处可以重定名文件夹。

    launcherapplication :在 vm 中配置参量

    item: 代表 launcher 中1个 item (例如 folder )

    launcher:y="..." /> //放置y标的目的的位置(在行中的位置)

    launchermodel : mvc 中的 m

    draglayer :内部撑持拖拽的 viegroup

    8.item.java:对于item的抽象,所有类型item的父类,item包罗的属性有id(标识item的id),cellx(在横向位置上的位置,从0起头),celly(在纵向位置上的位置,从0起头) ,spanx(在横向位置上所占的单元格),spany(在纵向位置上所占的单元格),screen(在orkspace的第几屏,从0起头),itemtype(item的类型,有idget,search,application等),container(item地点的)。

    c.要是该viegroup的onintercepttouchevent()在吸收到don事务措置惩罚完成然后return true,那末后续的move, up等事务将再也不通报给onintercepttouchevent(),而是和don事务同样通报给该viegroup的ontouchevent()措置惩罚,注重,方针vie将吸收不到不论什么事务。

    if (mlastdroptarget == droptarget) {

    e.要是终极需要措置惩罚事务的vie 的ontouchevent()归回了true,那末后续事务将可以接续通报给该vie的ontouchevent()措置惩罚。

    1.orkspace_screen.xml launcher:cellidth="95dip" cell(即item)的宽 launcher:cellheight="93dip" cell(即item)的宽 launcher:longaxisstartpadding="25dip" 较长(荧幕的宽厚温和高中较大的那一标的目的,按照反正屏标的目的有所差别)标的目的上间隔起航点的像素数 launcher:longaxisendpadding="55dip" 较长(荧幕的宽厚温和高中较大的那一标的目的,按照反正屏标的目的有所差别)标的目的上间隔终点的像素数 launcher:shortaxisstartpadding="20dip" 较短(荧幕的宽厚温和高中较大的那一标的目的,按照反正屏标的目的有所差别)标的目的上间隔起航点的像素数 launcher:shortaxisendpadding="120dip" 较短(荧幕的宽厚温和高中较大的那一标的目的,按照反正屏标的目的有所差别)标的目的上间隔起航点的像素数 launcher:shortaxiscells="3" 较短的标的目的上可以容纳的cell的数目 launcher:longaxiscells="5" 较长的标的目的上可以容纳的cell的数目

    utilities: 小东西

    3) void ondragover(dragsource source, int x, int y, int xoffset, int yoffset, object drag);

    1.界面模子:

    这份源码是基于2.1的launcher2,往后版本虽有变化,但梗概的道理一直照旧保留了。

    } else {//要是这一次为 null ,上一次不为 null ,那末把上一次坐标位置的 cell 去掉

    dragcontroller , dragscroller, dragsource, droptarget: 撑持拖拽操作

    launchersettings: 配置相干的东西

    shortaxiscells和longaxiscells决议1个orkspace(即celllayout)上可以容纳的item的个数为shortaxiscells*longaxiscells.

    droptarget.ondragenter(mdragsource, coordinates[0], coordinates[1],

    idget : 代表开始工作的 idget 实例,例如搜刮

    application :1个可开始工作的应用

    }

    2.drop& drag模子:

    6.launcherprovider.java:launcher的数值库,内里储存了桌面的item的信息。在创立数值库的时辰会loadfavorites(db)要领,loadfavorites()会剖析xml目次下的default_orkspace.xml文件,把此中的内部实质意义读出来写到数值库中,如许就做到了桌面的预制。

    3.application.xml

    动态增长荧幕是路程经过过程orksa台式机e .addchellold(vie)的体式格局使成为事实。基本思绪是:起首预先划定所许可的最大的荧幕数,然后在需要增长荧幕并且时下荧幕数没有跨越最大荧幕数的时辰路程经过过程(celllayout)minflater.inflate(r.layout.orkspace_s creen,null)创立1个celllayout实例出来,然后路程经过过程addchellold把它插手进去。在荧幕上的item被删去时路程经过过程从最后一屏起判断荧幕上是否有item,要是有的话保留,没有的话则删去最后一屏,以资类推。 3.预制桌面

    5.orkspace.java:抽象的桌面。由n个celllaout构成,从celllayout更高一级的层面上对于事务的措置惩罚。

    launcher:packagename="..." //idget的packagename launcher:classname=" ..." //使成为事实 idget的 receiver 类的名称. launcher:container="..." //放置的位置(只能为desktop) launcher:screen="..." //放置在第几屏上 launcher:x="..." //放置的x位置 launcher:y="..." //放置的y位置 launcher:spanx="..." //在x标的目的上所占格数 launcher:spany="..."/> //在y标的目的上所占格数 例如,要在第3屏的熬头行第二列放置起头放置1个x标的目的上占两个单元格,y标的目的上占两个单元格的钟表,可以插手以下代码:

    launcherprovider :1个 contentprovider ,为 launcher 储存信息

    3.touch event总结:

    过载请注明来由:://blog.csdn./fzh0803/archellove/2011/03/26/62 79995.aspx

    handlevie :1个 imagevie 。

    1、首要文件和类

    mlastdroptarget = droptarget;

    所有应用步伐和体系文件夹中item的界说。

    launcher:packagename=".android.alarmclock" launcher:classname=".android.alarmclock.analogappidgetprovider" launcher:container="desktop" launcher:screen="2" launcher:x="1" launcher:y="0" launcher:spanx="2" launcher:spany="2"/>4.转变主界面的摆列体式格局

    void ondroppleted(vie target, boolean success,int x,int y);

    search : 搜刮

    }

    foldericon: 浮此刻 orkspace 的 icon 代表了1个 folder

    要增长屏数,起首在按照反正屏在launcher.xml中的,然后在launcher.java中修改screen_count的值便可。

    1.launcher.java:launcher中首要的activity。

    p={.estrongs.android.taskmanager/.estrong s.android.taskmanager.taskmanager}。此中.estrongs.android.taskmanager为packagename, .estrongs.android.taskmanager.taskmanager为classname。

    5.增长orksa台式机e上的屏数

    2.动态增长荧幕

    orkspace: 荧幕上的一块地区范围

    * 当上一次的位置跟这一次差别并且上一次的位置不为空,申明item移 *动出了,将前次的 vie 按照前次的坐标从头摆列,并按照时下坐标重排*时下的*/

    userfolder , userfolder :文件夹包罗 applications ,shortcuts

    * 当这一次的 target 跟上一次不异时,按照坐标来移动item

    allappsgridvie :预示 app 的网格

    installshortcutreceiver , uninstallshortcutreceiver :1个 broadcastrecier

    2. application_boxed.xml

    mlastdroptarget.ondragexit(mdragsource, coordinates[0], coordinates[1],

    */

    ondragover是item在上一次位置和这一次位置所处的droptarget不异的时辰的回调。

    1) boolean acceptdrop(dragsource source, int x, int y, int xoffset, int yoffset, object drag);

    } else {

    (int) mtouchoffsetx, (int) mtouchoffsety, mdrag);

    if (mlastdroptarget != null) {

    2011年04月28日

    folder: item 子类

    launcher:classname="... " //应用开始工作时的熬头个activity

    orkspace的结构如次: b.新增idget: 在../package/apps/vlauncher/res/xml下的default_orkspace.xml文件中插手默许要放置的平凡的应用步伐。插手的格局为:

    celllayout: 荧幕网格化

    a.don事务起首融会贯通报到onintercepttouchevent()要领

    droptarget.ondragover(mdragsource, coordinates[0], coordinates[1],

    (int) mtouchoffsetx, (int) mtouchoffsety, mdrag);

    /**

    launcher的界面的rootvie是draglayer,它是1个framelayout,在它上边orkspace(应该说是celllayout)占了绝大部门的,celllayout的参量文件是orkspace_screen.xml。orkspace既然1个droptarget又是1个dragsource,可以从allappgridvie中拖出应用步伐放在它上边,也能够把它内里的item拖走删去或拖到bottomabr内里去。

    launcher:screen="..." //放置在第几屏(放在orkspace的时辰需要,从0起头,0为熬头屏,1为第二屏,以资类推...)

    folder : icons 的调集

    (int) mtouchoffsetx, (int) mtouchoffsety, mdrag);

    4、xml文件

    7.celllayout.java:构成orkspace的vie,担当自viegroup,既然1个dragsource,又是1个droptarget,可以将它内里的item拖出去,也能够容纳拖动过来的item。在orkspace_screen内里定了一些它的vie参量。

    acceptdrop 函数用来判断droptarget是否可以接管item放置在本身内里。

    ondrop是item被放置到droptarget时的回调。

    组图:launcher

    2.1 dragsource:可以拖动的对于象来历的器皿,在launcher中首要有allappgridvie,orkspace等。

    3. dragcontroller.java:为drag界说的1个接口。包罗1个接口,两个要领和两个静态恒量。接口为draglistener(包罗ondragstart(),ondragend()两个函数),ondragstart()是在刚起头拖动的时辰被挪用,ondragend()是在拖动完成时被挪用。在launcher中典型的应用是deletezone,在长按拖动item时挪用ondragstart()预示,在拖动竣事的时辰ondragend()隐蔽。两个函数包孕startdrag()和setdragitem().startdrag()用于在拖动是通报要拖动的item的信息和拖动的体式格局,setdragitem()用于通报item的参量信息(包孕位置和巨细)。两个恒量为drag_action_move,drag_action_copy来标识拖动的体式格局,drag_action_move为移动,暗示在拖动的时辰需要删去本来的item,drag_action_copy为复制型的拖动,暗示保留被拖动的item。

    3、几种疑难题目的处理完成体式格局

    ondragexit是item被拖出droptarget时的回调。

    要修改桌面的摆列体式格局,如次,先按照反正屏配置修改orkspace_screen.xml里shortaxiscells和longaxiscells的参量,然后在launcher.java中修改number_cells_x和number_cells_y的值,在2.3版本中刚起头往数值库中新增item的时辰会去判断,要是不修改number_cells_x和number_cells_y的话会引起一部门的item预示不出来,引起预制apk的掉败。

    增补launcher工程中的类:

    在../res/xml下的default_orkspace.xml文件中插手默许要放置的平凡的应用步伐。插手的格局为:

    d.要是终极需要措置惩罚事务的vie的ontouchevent()归回了false,那末该事务将被通报至其上一条理的vie的ontouchevent()措置惩罚。

    5) boolean ondrop(dragsource source, int x, int y, int xoffset, int yoffset, object drag);

    mlastdroptarget.ondragexit(mdragsource, coordinates[0], coordinates[1],

    launcher:packagename="... " //应用的packagename

    addadapter: 维护了 live fold , idget , shortcut , allpaper 4 个 listitem , 长按桌面会预示该列表

    deletezone : ui 的一部门

    4.launchermodel.java:匡助的文件。内里有很多封装的对于数值库的操作。包罗几个线程,此中最首要的是applicationsloader和desktopitemsloader。applicationsloader在加载所有应用步伐时施用,desktopitemsloader在加载orkspace的时辰施用。其它的函数就是对于数值库的封装,好比在删去,替代,新增步伐的时辰做更新数值库和ui的事情。

  • 相关阅读:
    2021NUAA暑假集训 Day3 题解
    2021NUAA暑假集训 Day2 题解
    2021NUAA暑期模拟赛部分题解
    CodeForces 1038D Slime
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 10689 Yet another Number Sequence
    HDU 4549 M斐波那契数列
    HDU 4990 Reading comprehension
    CodeForces 450B Jzzhu and Sequences
  • 原文地址:https://www.cnblogs.com/greywolf/p/2831284.html
Copyright © 2011-2022 走看看