【源码剖析】Launcher 8.0 源码 (20) --- Launcher 启动流程 第六步之BindWorkspace 第2小步添加图标

本文详细剖析了Android Launcher 8.0中启动流程的第六步——BindWorkspace,特别是如何将图标加载到桌面上。在创建屏幕后,通过bindItems方法按顺序绑定当前屏幕及后续屏幕的图标。该过程涉及快捷栏、应用图标、文件夹和小部件的创建,并设置了图标点击、大小和间距等。文章深入讲解了不同图标类型的生成与绑定,包括ShortcutInfo、FolderIcon和AppWidgetHostView的处理,以及在不同情况下的交互逻辑。
摘要由CSDN通过智能技术生成

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值