Android Laucnher3 拖拽应用图标阴影投放位置

时间:2023-01-24 14:00:55

  

  要想实现拖拽拖到到任何地方,阴影都投放在Workspace中,只需修改Workspace方法中的onDragOver方法,该方法在拖拽中会不断调用。


通过下面的代码可以看到,当判断用户拖拽图标到hostseat位置中,我们把图标阴影投放在workspace上。

//确定我们是否拖过了侧页
if (workspaceInModalState()) {

if (mLauncher.getHotseat() != null && !isExternalDragWidget(d)) {
if (isPointInSelfOverHotseat(d.x, d.y, r)) {
layout = mLauncher.getHotseat().getLayout();
}
}
if (layout == null) {
layout = findMatchingPageForDragOver(d.dragView, d.x, d.y, false);
}
if (layout != mDragTargetLayout) {
setCurrentDropLayout(layout);
setCurrentDragOverlappingLayout(layout);

boolean isInSpringLoadedMode = (mState == State.SPRING_LOADED);
if (isInSpringLoadedMode) {
if (mLauncher.isHotseatLayout(layout)) {
mSpringLoadedDragController.cancel();
} else {
mSpringLoadedDragController.setAlarm(mDragTargetLayout);
}
}
}
} else {
// Test to see if we are over the hotseat otherwise just use the current page
//测试我们是否在hotseat否则只使用当前页
/**
* 修改这里,如果用户把图标拉到hotseat区域也把图标投放到workspace
*/
if (mLauncher.getHotseat() != null && !isDragWidget(d)) {
if (isPointInSelfOverHotseat(d.x, d.y, r)) {
// layout = mLauncher.getHotseat().getLayout();
layout = getCurrentDropLayout();
}
}
if (layout == null) {

layout = getCurrentDropLayout();
}
if (layout != mDragTargetLayout) {
setCurrentDropLayout(layout);
setCurrentDragOverlappingLayout(layout);
}
}