fzty1126410594的专栏

Android获取快捷方式图标信息

Android获取快捷方式图标信息

       如何获取程序快捷方式的坐标

      先说我是个新手,毕业接触Android4个月的时间,今天是第一次发文章,内容有什么不对的地方欢迎大家指正,共同提高。

      这篇文章主要解决的问题是获取程序快捷方式图标的位置。 探讨这个问题的原因是对金山清理大师那个清理内存的快捷方式是怎么实现那个效果感兴趣,自己简单的试了一下。感觉有所收获,和大家一起分享。


        我做的仅仅就是更具快捷方式的位置显示一张图片,很简单的一个测试。先看图片:

        效果不怎么好,功能基本上都有了。

基本上需要注意的地方有两点:

一、透明主题。在AndroidManifest.xml中配置透明主题,可以实现背景为当前页面。

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" 
        android:theme="@android:style/Theme.Translucent" >
        <activity
            android:name=".ApplicationTestActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

二、获取桌面快捷方式的坐标。

通过Launcher源码中Launcher.java中onClick()方法可以看到:

  public void onClick(View v) {
        // Make sure that rogue clicks don't get through while allapps is launching, or after the
        // view has detached (it's possible for this to happen if the view is removed mid touch).
        if (v.getWindowToken() == null) {
            return;
        }

        if (!mWorkspace.isFinishedSwitchingState()) {
            return;
        }

        Object tag = v.getTag();
        if (tag instanceof ShortcutInfo) {
            // Open shortcut
            final Intent intent = ((ShortcutInfo) tag).intent;
            int[] pos = new int[2];
            v.getLocationOnScreen(pos);
            intent.setSourceBounds(new Rect(pos[0], pos[1],
                    pos[0] + v.getWidth(), pos[1] + v.getHeight()));

            boolean success = startActivitySafely(v, intent, tag);

            if (success && v instanceof BubbleTextView) {
                mWaitingForResume = (BubbleTextView) v;
                mWaitingForResume.setStayPressed(true);
            }
        } else if (tag instanceof FolderInfo) {
            if (v instanceof FolderIcon) {
                FolderIcon fi = (FolderIcon) v;
                handleFolderClick(fi);
            }
        } else if (v == mAllAppsButton) {
            if (isAllAppsVisible()) {
                showWorkspace(true);
            } else {
                onClickAllAppsButton(v);
            }
        }
    }


中有intent.setSourceBounds(new Rect(pos[0], pos[1], pos[0] + v.getWidth(), pos[1] + v.getHeight()))。放置了快捷方式的坐标信息,通过startActivitySafely启动程序。因此我们在程序中可以通过

Rect rect = this.getIntent().getSourceBounds();

得到Rect对象,从而获得快捷方式的坐标信息。然后可以通过对这些信息进行处理,从而实现一个看起来比较炫的效果。

声明:本人菜鸟,有误的地方欢迎指正!!


阅读更多
个人分类: Android学习
下一篇系统倒计时CountDownTimer类的使用。
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭