代码全在Workspace.java文件里修改
1、拦截把app图标拖到小部件上时会调用的方法。
public void onDragOver(DragObject d) {
......
mTargetCell = findNearestArea((int) mDragViewVisualCenter[0],
(int) mDragViewVisualCenter[1], minSpanX, minSpanY,
mDragTargetLayout, mTargetCell);
int screenId = getIdForScreen(mDragTargetLayout);
//因为我的小部件要固定在第0屏第0行,所以凡是图标拖到这里都直接return,条件可自行更改。
if(screenId == 0 && mTargetCell[1] == 0){
return;
}
}
这个方法是在拖拽app时每拖到另一个位置都会调用的方法,所以会调用很多次的。
2、当拖动到小部件位置时,拦截重新排序。
class ReorderAlarmListener implements OnAlarmListener {
......
public void onAlarm(Alarm alarm) {
int[] resultSpan = new int[2];
mTargetCell = findNearestArea((int) mDragViewVisualCenter[0],
(int) mDragViewVisualCenter[1], minSpanX, minSpanY, mDragTargetLayout,
mTargetCell);
int screen = getIdForScreen(mDragTargetLayout);
if(screen == 0 && mTargetCell[1] == 0){
return;
}
}
}
这个方法的作用是当拖拽到已经有app的位置时,可以把原app挤到旁边,所以这里我们还是要拦截。
3、app落下的时候先检测位置是不是覆盖了小部件的位置,如果覆盖了就拦截。
public void onDrop(final DragObject d, DragOptions options) {
......
mTargetCell = findNearestArea((int) mDragViewVisualCenter[0], (int)
mDragViewVisualCenter[1], spanX, spanY, dropTargetLayout, mTargetCell);
//我的小部件位置在第0屏第0行,条件自定
if(mTargetCell[1] == 0 && screenId == 0){
mDragController.cancelDrag();
return;
}
}
到这里就改完啦。
我暂时只改了这三处,不知道后面会不会有Bug,要有的话再更新。