1:然后我自己看了一下桌面图标的载入过程:

桌面第一次载入时是默认读取一个xml配置文件,完毕配置工作。这个配置文件在Launcher文件夹下,

路径是:\Launcher\res\xml\default_workspace.xml 。这个XML文件就是刚升级,Launcher第

一次显示的时候,会读取的配置文件。default_workspace。xml里面能够配置APP快捷方式、Widget、Search搜索栏等









launcher里面负责解析default_workspace.xml文件的方法是 LauncherProvider.java里面的loadFavorites方法

LauncherProvider.java里面有loadFavorites()这种方法:

     private int loadFavorites(SQLiteDatabase db, int workspaceResourceId) {

            Intent intent = new Intent(Intent.ACTION_MAIN, null);

            intent.addCategory(Intent.CATEGORY_LAUNCHER);

            ContentValues values = new ContentValues();





            if (LOGD) Log.v(TAG, String.format("Loading favorites from resid=0x%08x", workspaceResourceId));





            PackageManager packageManager = mContext.getPackageManager();

            int i = 0;

            try {

                XmlResourceParser parser = mContext.getResources().getXml(workspaceResourceId);

                AttributeSet attrs = Xml.asAttributeSet(parser);

                beginDocument(parser, TAG_FAVORITES);





                final int depth = parser.getDepth();





                final HashMap<Long, ItemInfo[][]> occupied = new HashMap<Long, ItemInfo[][]>();

                LauncherModel model = LauncherAppState.getInstance().getModel();

                。

                。

                。

                。





            return i;

        }





事实上就是一个分析XML和写入数据库的过程,LauncherProvider.java是整个Launcher的数据来源,

知道这些图标怎样载入出来之后对做屏幕是坏 改动背景大小  行列等都有优点。





















2:Launcher 图标增加默认背景。是主题功能的一个小部分也是必不可少的一部分,以下是我今天整理的一些逻辑和代码,Launcher图标的获取处理是在Utilities.java类里面,

我们能够从里面找到Bitmap createIconBitmap(Drawable icon, Context context) 方法。这种方法就是返回应用图标的。

     static Bitmap createIconBitmap(Bitmap icon, Context context) {

        int textureWidth = sIconTextureWidth;

        int textureHeight = sIconTextureHeight;

        int sourceWidth = icon.getWidth();

        int sourceHeight = icon.getHeight();

        if (sourceWidth > textureWidth && sourceHeight > textureHeight) {

            // Icon is bigger than it should be; clip it (solves the GB->ICS migration case)

            return Bitmap.createBitmap(icon,

                    (sourceWidth - textureWidth) / 2,

                    (sourceHeight - textureHeight) / 2,

                    textureWidth, textureHeight);

        } else if (sourceWidth == textureWidth && sourceHeight == textureHeight) {

            // Icon is the right size, no need to change it

            return icon;

        } else {

            // Icon is too small, render to a larger bitmap

            final Resources resources = context.getResources();

            return createIconBitmap(new BitmapDrawable(resources, icon), context);

        }

    }

  能够在这里改动图标的背景 能够增加  

if (tru{

                Bitmap backBitmap = BitmapFactory.decodeResource(context.getResources(),

                        R.drawable.apical_icon_bg);

                int backWidth = backBitmap.getWidth();

                int backHeight = backBitmap.getHeight();

                if(backWidth != sIconWidth || backHeight != sIconHeight)

                {

                    Matrix matrix = new Matrix();

                    matrix.postScale((float)sIconWidth/backWidth, (float)sIconHeight/backHeight);

                    canvas.drawBitmap(Bitmap.createBitmap(backBitmap, 0, 0, backWidth, backHeight, matrix, true),

.0f, 0.0f, null);

                }else

                {

                    canvas.drawBitmap(backBitmap, 0.0f, 0.0f, null);

                }

            }





直接指定一个图片为图标背景 R.drawable.apical_icon_bg;

android launcher开发之图标背景以及默认配置的更多相关文章

  1. Android应用开发-小巫CSDN博客client之嵌入有米广告

    Android应用开发-小巫CSDN博客client之嵌入有米广告 上一篇博客给大家介绍怎样集成友盟社会化组件,本篇继续带来干货,教大家怎样嵌入广告到应用中去.小巫自称专业对接30年,熟悉各大渠道SD ...

  2. Android NDK开发Hello Word!

    在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...

  3. Android Launcher分析和修改1——Launcher默认界面配置(default_workspace)

    最近工作都在修改Launcher,所以打算把分析源码和修改源码的过程记录下来,最近会写一些关于Launcher的分析和修改博文.因为我是修改4.0.3的Launcher,所以后面文章里面的Launch ...

  4. [转载] Android Metro风格的Launcher开发系列第一篇

    前言:从毕业到现在已经三年多了,回忆一下这三年基本上没有写过博客,总是觉得忙,没时间写,也觉得写博客没什么大用.但是看到很多大牛们都在写博客,分享自己的东西,所以嘛本着向大牛看齐,分享第一,记录第二的 ...

  5. Android Metro风格的Launcher开发系列第一篇

    前言:从毕业到现在已经三年多了,回忆一下这三年基本上没有写过博客,总是觉得忙,没时间写,也觉得写博客没什么大用.但是看到很多大牛们都在写博客,分享自己的东西,所以嘛本着向大牛看齐,分享第一,记录第二的 ...

  6. Android Metro风格的Launcher开发系列第三篇

    前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...

  7. 【转载】Android Metro风格的Launcher开发系列第二篇

    前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客Android Metro风格的Launcher开发系列第一篇写了如 ...

  8. Android开发,使用背景图(xml drawable)为view 设置边框

    Android 开发中,遇到需要设置边框的情景,使用背景图来实现,代码如下: <layer-list xmlns:android="http://schemas.android.com ...

  9. Android Launcher分析和修改11——自定义分页指示器(paged_view_indicator)

    Android4.0的Launcher自带了一个简单的分页指示器,就是Hotseat上面那个线段,这个本质上是一个ImageView利用.9.png图片做,效果实在是不太美观,用测试人员的话,太丑了. ...

随机推荐

  1. C++创建动态链接库(*.dll)

    1.      从 “文件”菜单中,选择 “新建”,然后选择 “项目…”. 2.      在“项目类型”窗格中,选择“Visual C++”下的“Win32”. 3.      在“模板”窗格中,选 ...

  2. Android学习笔记:如何高效显示图片,避免内存溢出 和 ImageView无法显示大尺寸的图片

    因为手机的内存资源是有限的,每个app可使用的内存是受限的.而现在采用高分辨率拍的照片往往很大.如果加载时不注意方法,很有可能会引起java.lang.OutofMemoryError: bitmap ...

  3. Corrupted MAC on input at /usr/local/perl/lib/site_perl/5.22.1/x86_64-linux/Net/SSH/Perl/Packet.pm l

    <pre name="code" class="python">[Thu May 5 11:02:27 2016] [error] Corrupte ...

  4. WeCenter 社交化问答社区程序 | WeCenter 是一款知识型的社交化问答社区程序,专注于社区内容的整理、归类、检索和再发行

    WeCenter 社交化问答社区程序 | WeCenter 是一款知识型的社交化问答社区程序,专注于社区内容的整理.归类.检索和再发行 为什么选择 WeCenter 程序? 让您的社区更智能地运作,强 ...

  5. 分享:json2.js源代码解读笔记

    1. 怎样理解"json" 首先应该意识到,json是一种数据转换格式,既然是个"格式",就是个抽象的东西.它不是js对象,也不是字符串,它仅仅是一种格式,一种 ...

  6. 在cmd窗口中查询android的sqlite3数据库表之步骤

    本文主要是写了一个android程序对sqlite3中数据库的employee表的插入.删除的操作,然后在cmd窗口中用sql命令查询employee表的操作过程. 1.第一步:首先把程序写好. 1. ...

  7. Mac中QT程序发布

    基于Qt开发的应用程序进驻Mac App Store 最近摸索着将一个基于用Qt开发的App发布到Mac App Store,在网上查找相关资料的时候,发现很多文档都过期了,要有一些修改,所以想记录下 ...

  8. Jquery学习笔记:删除节点的操作

    假设如下的html代码 <div id="mydiv" style="width:100px;height:100px;border:1px solid red&q ...

  9. 无法从“const char *”转换为“char *”

    写了如下的一段代码: const char *str; char *p=str; 提示错误: const char* 不能用于初始化char *类型的实体.这是为什么?我想应该是const char ...

  10. keepavlied一些参数

    priority 表示优先级 virtual_ipaddress 虚拟的IP地址(VIP) delay_loop 每个2秒检查一次real_server状态 notify_down 检测到服务down ...