一、DragScroller
DragScroller是一个接口,顾名思义是控制滑动的接口,它定义了4个方法
public interface DragScroller {
/**
* 左滑
*/
void scrollLeft();
/**
* 右滑
*/
void scrollRight();
/**
*进入滑动区域
*/
boolean onEnterScrollArea(int x, int y, int direction);
/**
*退出滑动区域
*/
boolean onExitScrollArea();
}
想具体分析它还是要结合WorkSpace和DragController,
二、DragController
DragController是一个类,不继承任何父类,内部提供了一个接口DragListener
interface DragListener {
void onDragStart(DragSource source, Object info, int dragAction);
void onDragEnd();
}
onDragStart————拖动图标开始时执行的方法
onDragEnd———— 拖动图标结束时执行的方法
DragController是处理拖动图标的类,那么我们自然得关注它的触摸事件.拖动图标的流程是这样的
Launcher和WorkSpace后面会详解,大家目前只要知道这个流程即可.Launcher的onLongClick事件会调用WorkSpace的startDrag方法,startDrag方法会调用beginDragShared方法, beginDragShared方法最终调用DragController的startDrag方法.好,我们先看下这个startDrag方法.
/**
* @param b 拖动对象的图像,有可能会被缩放
* @param dragLayerX 拖动对象的图像x坐标
* @param dragLayerY 拖动对象的图像y坐标
* @param source 发起拖动的对象
* @param dragInfo 被拖动对象的数据
* @param dragAction 拖放的动作:移动或者复制
* @param dragRegion 拖动对象bitmap的区域
*/
public void startDrag(Bitmap b, int dragLayerX, int dragLayerY,
DragSource source, Object dragInfo, int dragAction, Point dragOffset, Rect dragRegion,
float initialDragViewScale) {
if (PROFILE_DRAWING_DURING_DRAG) {
android.os.Debug.startMethodTracing("Launcher");
}
// 隐藏软键盘
if(mInputMethodManager == null) {
mInputMethodManager = (InputMethodManager)
mLauncher.getSystemService(Context.INPUT_METHOD_SERVICE);
}
mInputMethodManager.hideSoftInputFromWindow(mWindowToken, 0);