android Launcher文件夾功能分析

目录:

1.桌面文件夾的作用及顯示效果
2.文件夾的信息存儲及默認加載
3.文件夾的生成和刪除
4.文件夾的打開和關閉
5.文件夾的拖動及位置交換  

内容:

1.文件夾的作用及顯示效果 
      》 當手機或者平板電腦上安裝的應用軟件越來越多時,查找和管理起來非常麻煩。這時,Launcher提供的桌面文件夾可以幫助整理分類所有的應用,方便快速的查找和打開某個應用程序。桌面文件夾的顯示效果如圖:
                      文件夾關閉時的效果

         

                              文件夾打開后的效果

                                              

2.文件夾的數據存儲及默認加載
       》Launcher桌面元素(包含桌面桌面APP快捷方式、folder、Widget)信息,都存儲在名稱為“favorites”的SQLite數據表里,表信息如下圖所示:

    

      其中itemTtype表示應用的類型,文件夾用2標識;container表示應用程序的容器,整數為屬於文件夾的應用。
 
       》文件夾和其它桌面元素的默認加載,都是從default_workspace.xml文件里獲取的,因此把需要在桌面預製的文件夾和快捷方式寫在default_workspace.xml里即可。如下代碼:
   
3.文件夾的生成和刪除
    》在桌面上拖動一個APP快捷方式到另一個APP快捷方式的位置上,當符合文件夾生成條件時,便在桌面上形成一個文件夾。

       

 

      》DeleteZone刪除框,默認處於隱藏狀態,將folder(或其他item)長按拖動的時候會顯示,如果將folder拖動到刪除框的位置時會刪除folder, 調用DeleteDropTarget類的completeDrop(DragObject d)方法,來實現刪除操作。
 

               

 4.文件夾的打開和關閉

    》打開文件夾,首先獲取folder信息,然後加載打開動畫。

   

     》關閉文件夾,首先獲取正在打開的folder信息,然後執行關閉動畫。

        

5.文件夾的拖動及位置交換
    》文件夾的拖動跟桌面元素的拖動原理一致,相關文件如下:
    DragController.java:拖動控制接口。
    DragLayer.java:實現DragController接口。
    DragSource.java:拖動源接口,定義onDropCompleted(View target, DragObject d,booleansuccess)。
    DropTarget.java:拖動目標,該接口定義了onDrop(),onDragEnter(),onDragOver(),onDropExit(),accetDrop()方法,拖動對象必須實現這些方法。
    》folder中长按拖動并交换位置的流程如下:
   (1).在Folder.java里設置長按監聽事件,當有長安動作時,執行onLongClick(View v)方法,拖拽事件是交给Workspace来处理,最后统一交给DragController.java类处    理和分发相应的事件。
   (2).當文件夹拖拽到另一个快捷方式的上面的时候,調用onDragOver(DragObject d)方法,進行交換。此方法中的findNearestArea()方法是判断對象停留在哪个目标的附近;此方法中的setOnAlarmListener(mReorderAlarmListener)是設置150ms動畫延時后進行交換。mReorderAlarmListener對象里封裝了realTimeReorder(mEmptyCell,mTargetCell)方法,传递这个快捷方式在屏幕x轴,y轴上位置信息,进行交换。
   (3).放下的时候会触发Folder.java的onDrop()方法,此方法的作用是讓放下的view可见,并把当前的这个快捷方式添加到mInfo對象中。
   (4).当执行完onDrop()方法后執行onDropCompleted()方法,更新item的位置信息在数据库中存儲。

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值