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