Launcher8.0启动流程的第六步startLoader的bindWorkspace将sBgDataModel中的图标放到桌面上。 放置的时候为了提高用户体验,优先放置当前屏幕的图标和widget,然后再放其他屏幕的图标,这样用户能更快的看到图标显示完成。
在创建完屏幕后,添加桌面的图标进入bindWorkspaceItems()方法
//绑定图标是回调Launcher的对应方法,而绑定时按照不同item类型进行不同的绘制。
public void bindItems(final ArrayList<ItemInfo> items, final int start, final int end,
final boolean forceAnimateIcons) {
final AnimatorSet anim = LauncherAnimUtils.createAnimatorSet();
final Collection<Animator> bounceAnims = new ArrayList<Animator>();
final boolean animateIcons = forceAnimateIcons && canRunNewAppsAnimation();
Workspace workspace = mWorkspace;
long newItemsScreenId = -1;
for (int i = start; i < end; i++) {
final ItemInfo item = items.get(i);
//首先进行一个简单判断,如果当前图标是放在快捷栏,而当前手机是没有快捷栏的,则不进行这个图标显示。
if (item.container == LauncherSettings.Favorites.CONTAINER_HOTSEAT &&
mHotseat == null) {
continue;
}
// 图标有所细分,单个图标的统一为一类,使用createShortcut来创建
final View view;
switch (item.itemType) {
case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION:
case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
case LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT: {
ShortcutInfo info = (ShortcutInfo) item;
view = createShortcut(info);
break;
}
//createShortcut生成了图标的类型为BubbleTextView,BubbleTextView是放在单个格子中显示的内容
public View createShortcut(ViewGroup parent, ShortcutInfo info) {
BubbleTextView favorite = (BubbleTextView) getLayoutInflater().inflate(R.layout.app_icon,
parent, false);
favorite.applyFromShortcutInfo(info);
favorite.setCompoundDrawablePadding(mDeviceProfile.iconDrawablePaddingPx);
favorite.setOnClickListener(this);