DragController.java為Drag定義
為Drag定義的一個接口。包含一個接口,兩個方法和兩個靜態常量。接口為DragListener(包含onDragStart(),onDragEnd()兩個函數),onDragStart()是在剛開始拖動的時候被調用,onDragEnd()是在拖動完成時被調用。在launcher中典型的應用是DeleteZone,在長按拖動item時調用onDragStart()顯示,在拖動結束的時候onDragEnd()隱藏。兩個函數包括startDrag()和setDragItemInfo().startDrag()用于在拖動是傳遞要拖動的item的信息以及拖動的方式,setDragItemInfo()用于傳遞item的參數信息(包括位置以及大小)。兩個常量為DRAG_ACTION_MOVE,DRAG_ACTION_COPY來標識拖動的方式,DRAG_ACTION_MOVE為移動,表示在拖動的時候需要刪除原來的item,DRAG_ACTION_COPY為復制型的拖動,表示保留被拖動的item。
界面模型
Launcher的界面的rootview是DragLayer,它是一個FrameLayout,在它上面workspace(應該說是celllayout)占了絕大部分的空間,celllayout的參數文件是workspace_screen.xml。workspace既是一個DropTarget又是一個DragSource,可以從AllAppGridView中拖出應用程序放在它上面,也可以把它里面的item拖走刪除或者拖到bottombar里面去。
(對于想修改launcher的同學,可以自定義DragLayer.java,比如改為AbsoluteLayout等,再修改launcher.xml布局文件,就可以實現各種樣式的launcher界面。)