`

2011.09.13(2)——— android 图标上面添加数字

阅读更多

2011.09.13(2)——— android 图标上面添加数字

参考:http://flysnow.iteye.com/blog/906770

 

 

 

  1. 新建名为NotificationIconCount的Android Project。
  2. 首先修改AndroidManifest.xml,加入权限<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>,因为我们要读取联系人。
  3. 修改main.xml如下,这里定义一个ImageView,勇于预览我们处理好的加上数字的图标。
    Xml代码  收藏代码
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:orientation="vertical"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent"  
    6.     >  
    7.     <ImageView   
    8.         android:id="@+id/icon"  
    9.         android:layout_width="wrap_content"  
    10.         android:layout_height="wrap_content"  
    11.         android:scaleType="center"  
    12.         android:adjustViewBounds="true"/>  
    13. </LinearLayout>  
     
  4. 先来获取手机内通讯录的图标,如果没有获取到,则使用该应用的图标.
    Java代码  收藏代码
    1. super.onCreate(savedInstanceState);  
    2.         setContentView(R.layout.main);  
    3.         mImageView=(ImageView)findViewById(R.id.icon);  
    4.         //优先采用联系人的图标,如果不存在则采用该应用的图标  
    5.         Drawable contactIcon;  
    6.         try {  
    7.             contactIcon = getPackageManager().getApplicationIcon("com.android.contacts");  
    8.         } catch (NameNotFoundException e) {  
    9.             contactIcon=null;  
    10.         }  
    11.         Bitmap icon;  
    12.         if(contactIcon instanceof BitmapDrawable){  
    13.             icon=((BitmapDrawable)contactIcon).getBitmap();  
    14.         }else{  
    15.             icon=getResIcon(getResources(), R.id.icon);  
    16.         }  
     这里用到一个自定义的根据资源图标id获取图片的函数,很简单,代码如下:
    Java代码  收藏代码
    1. /** 
    2.     * 根据id获取一个图片 
    3.     * @param res 
    4.     * @param resId 
    5.     * @return 
    6.     */  
    7.    private Bitmap getResIcon(Resources res,int resId){  
    8.     Drawable icon=res.getDrawable(resId);  
    9.     if(icon instanceof BitmapDrawable){  
    10.         BitmapDrawable bd=(BitmapDrawable)icon;  
    11.         return bd.getBitmap();  
    12.     }else{  
    13.         return null;  
    14.     }  
    15.    }  
     
  5. 获取到图标之后就要对这个图标进行处理了,要为该图标加上联系人数量的覆盖,首先我们看获取联系人个数的函数。
    Java代码  收藏代码
    1. /** 
    2.      * 获取联系人的个数 
    3.      * @return 手里通讯录中联系人的个数 
    4.      */  
    5.     private int getContactCount(){  
    6.         Cursor c=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, new String[]{ContactsContract.Contacts._COUNT}, nullnullnull);  
    7.         try{  
    8.             c.moveToFirst();  
    9.             return c.getInt(0);  
    10.         }catch(Exception e){  
    11.             return 0;  
    12.         }finally{  
    13.             c.close();  
    14.         }  
    15.     }  
     这里采用Uri的方式获取联系人的cursor,然后获取个数。
  6. 有了图标和联系人个数就可以生成带联系人个数的图标了,我们看下生成的这个函数。
    Java代码  收藏代码
    1. /** 
    2.      * 在给定的图片的右上角加上联系人数量。数量用红色表示 
    3.      * @param icon 给定的图片 
    4.      * @return 带联系人数量的图片 
    5.      */  
    6.     private Bitmap generatorContactCountIcon(Bitmap icon){  
    7.         //初始化画布  
    8.         int iconSize=(int)getResources().getDimension(android.R.dimen.app_icon_size);  
    9.         Log.d(TAG, "the icon size is "+iconSize);  
    10.         Bitmap contactIcon=Bitmap.createBitmap(iconSize, iconSize, Config.ARGB_8888);  
    11.         Canvas canvas=new Canvas(contactIcon);  
    12.           
    13.         //拷贝图片  
    14.         Paint iconPaint=new Paint();  
    15.         iconPaint.setDither(true);//防抖动  
    16.         iconPaint.setFilterBitmap(true);//用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果  
    17.         Rect src=new Rect(00, icon.getWidth(), icon.getHeight());  
    18.         Rect dst=new Rect(00, iconSize, iconSize);  
    19.         canvas.drawBitmap(icon, src, dst, iconPaint);  
    20.           
    21.         //在图片上创建一个覆盖的联系人个数  
    22.         int contacyCount=getContactCount();  
    23.         //启用抗锯齿和使用设备的文本字距  
    24.         Paint countPaint=new Paint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG);  
    25.         countPaint.setColor(Color.RED);  
    26.         countPaint.setTextSize(20f);  
    27.         countPaint.setTypeface(Typeface.DEFAULT_BOLD);  
    28.         canvas.drawText(String.valueOf(contacyCount), iconSize-1825, countPaint);  
    29.         return contactIcon;  
    30.     }  
     注释的很详细,就不解释了,无非就是定义一个画布(Canvas),然后在上面画图标,画数字文本。
  7. 然后我们把得到的这个处理过的Bitmap放在我们在main.xml里定义的ImageView里展示就可以看到效果了.
    Java代码  收藏代码
    1. mImageView.setImageBitmap(contactCountIcon);  
     
  8. 我们启动应用看看效果.

     我们看到了,右上角红色的1代表我手机中有一个联系人

分享到:
评论

相关推荐

    2011.10.09——— android ImageView放大缩小(2)

    标题中的“2011.10.09——— android ImageView放大缩小(2)”指的是一个关于Android平台中ImageView组件的优化技术,特别是如何处理图片的缩放问题。在Android应用开发中,ImageView是用于显示图像的常见组件,但...

    基于WXSS_WXML技术...序的开发——以西岭雪山为例_邹明荣.caj

    基于WXSS_WXML技术...序的开发——以西岭雪山为例_邹明荣.caj

    NPSWF32调试版本.rar

    ▕ ▕ ▕—————————————————————————————————————— ▕ ▕——[13.27MB] 【NPSWF32调试版本_11.1.102.55_debug】 ▕ ▕ ▕——[856 B] flashplayer.xpt ▕ ▕ ▕——[3.90MB...

    2918.D密钥分散管理系统——密钥确认算法实现 开题报告.doc

    2918.D密钥分散管理系统——密钥确认算法实现 开题报告.doc

    2011.10.19——— android 显示一行内容并录制其音频

    这篇博客“2011.10.19——— android 显示一行内容并录制其音频”可能详细探讨了如何实现这个功能。虽然描述部分没有提供具体信息,但我们可以基于标签“源码”和“工具”来推测文章内容,以及从文件名...

    Android中文翻译组——Android开发者指南(2).chm

    Android中文翻译组是一个非盈利性质的开源组织,至今已超过300人报名参与,关于翻译组的介绍,请看这里。欢迎更多朋友加入,发邮件到over140@gmail.com申请加入。 Android中文翻译组WIKI网站:...

    C语言项目——MP3音乐播放器.zip

    C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——MP3音乐播放器.zip C语言项目——...

    C语言项目——通讯录管理系统.zip

    C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言...

    python项目——学生管理系统.zip

    python项目——学生管理系统.zip python项目——学生管理系统.zip python项目——学生管理系统.zip python项目——学生管理系统.zip python项目——学生管理系统.zip python项目——学生管理系统.zip python项目——...

    天正建筑CAD快捷键-较全常用.doc

    13. Ctrl+T:关闭数字化仪——关闭数字化仪输入设备。 14. Ctrl+D:坐标显示——控制坐标值的显示。 15. Ctrl+H:设置拾取样式——调整选取对象的方式。 16. Ctrl+J:重复上一步——快速重复执行上一个命令。 17. ...

    Android中文翻译组——Android中文API——android.widget合集(中)

    `Android中文翻译组——Android中文API——android.widget合集(中).chm`文件很可能是这个主题的中文参考手册,包含了这些控件的详细解释、使用示例和API文档,对于初学者来说是一份宝贵的资源。建议读者仔细阅读并...

    C语言项目——窗体版图书管理系统.zip

    C语言项目——窗体版图书管理系统.zip C语言项目——窗体版图书管理系统.zip C语言项目——窗体版图书管理系统.zip C语言项目——窗体版图书管理系统.zip C语言项目——窗体版图书管理系统.zip C语言项目——窗体版...

    2021-2022年收藏的精品资料企业会计准则制度大全.doc

    错误更正...............................................................——建造合同...........................................................................................112企业会计准则——股份支付.....

    教务管理系统-数据库课程设计mysql+java.zip

    教务管理系统——数据库课程设计mysql+java.zip教务管理系统——数据库课程设计mysql+java.zip教务管理系统——数据库课程设计mysql+java.zip教务管理系统——数据库课程设计mysql+java.zip教务管理系统——数据库...

    Bluetooth_4.3-master.rar

    ,最近一直和医疗打交道,做些蓝牙有关的...2.深入了解Android蓝牙Bluetooth——《进级篇》 2.深入了解Android蓝牙Bluetooth——《总结篇》 欢迎入群 QQ交流群 :232203809 微信公众号:终端研发部。加入我们一起学习

    中考英语外研版初二下模块4练习学案02:短语总结+练习及解析.docx

    1. **a copy of** —— 表示“一份...的复印件”。 2. **turn on** —— 打开(设备),**turn off** —— 关闭(设备)。 3. **save one's life** —— 挽救某人的生命。 4. **use sth. to do sth.** —— 使用某物...

    八路数电电路——病房呼叫系统.ms10 八路数电电路——病房呼叫系统(1优先级最高)_rezip1.zip

    设计内容及要求 1.有六间病房,每个病房装有呼叫按钮;...2.1号优先级别最高,1—6优先级别依次降低; 3.当有病人紧急呼叫时发出5S的呼叫声; 4.护士值班室有一个数码显示管,可显示呼叫的病房号。

    java毕业设计——基于Vue+Node的外卖系统设计与实现(答辩PPT+源代码).zip

    java毕业设计——基于Vue+Node的外卖系统设计与实现(答辩PPT+源代码).zip java毕业设计——基于Vue+Node的外卖系统设计与实现(答辩PPT+源代码).zip java毕业设计——基于Vue+Node的外卖系统设计与实现(答辩PPT+源...

    方的歇后语.pdf

    2. "铁拐李的方便铲——不敢放手":铁拐李是道教八仙之一,他的拐杖是其法宝,这句歇后语比喻有重要的工具或手段不能轻易放弃。 3. "华佗开药方——手到病除":华佗是古代著名的医生,这句歇后语意味着处理问题或...

    java毕业设计-基于springboot的ERP系统源码+数据库.zip

    java毕业设计——基于springboot的ERP系统源码+数据库.zipjava毕业设计——基于springboot的ERP系统源码+数据库.zipjava毕业设计——基于springboot的ERP系统源码+数据库.zipjava毕业设计——基于springboot的ERP...

Global site tag (gtag.js) - Google Analytics