目录:


1.桌面文件夾的作用及顯示效果



2.文件夾的信息存儲及默認加載



3.文件夾的生成和刪除



4.文件夾的打開和關閉



5.文件夾的拖動及位置交換  


内容:


1.文件夾的作用及顯示效果



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



文件夾關閉時的效果


        

Android 桌面文件夹打开动画 安卓 桌面文件夹_功能

 

文件夾打開后的效果

       

Android 桌面文件夹打开动画 安卓 桌面文件夹_android_02

                                      

2.文件夾的數據存儲及默認加載


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


    

Android 桌面文件夹打开动画 安卓 桌面文件夹_功能_03


      其中itemTtype表示應用的類型,文件夾用2標識;container表示應用程序的容器,整數為屬於文件夾的應用。


 


       》文件夾和其它桌面元素的默認加載,都是從default_workspace.xml文件里獲取的,因此把需要在桌面預製的文件夾和快捷方式寫在default_workspace.xml里即可。如下代碼:


  

Android 桌面文件夹打开动画 安卓 桌面文件夹_android_04

 


3.文件夾的生成和刪除


    》在桌面上拖動一個APP快捷方式到另一個APP快捷方式的位置上,當符合文件夾生成條件時,便在桌面上形成一個文件夾。


       

Android 桌面文件夹打开动画 安卓 桌面文件夹_功能_05

 


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


 


               

Android 桌面文件夹打开动画 安卓 桌面文件夹_android_06

4.文件夾的打開和關閉


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


   

Android 桌面文件夹打开动画 安卓 桌面文件夹_文件夾_07

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

        

Android 桌面文件夹打开动画 安卓 桌面文件夹_Launcher_08


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的位置信息在数据库中存儲。