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. <?xmlversion="1.0"encoding="utf-8"?>
    2. <LinearLayoutxmlns: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. DrawablecontactIcon;
    6. try{
    7. contactIcon=getPackageManager().getApplicationIcon("com.android.contacts");
    8. }catch(NameNotFoundExceptione){
    9. contactIcon=null;
    10. }
    11. Bitmapicon;
    12. if(contactIconinstanceofBitmapDrawable){
    13. icon=((BitmapDrawable)contactIcon).getBitmap();
    14. }else{
    15. icon=getResIcon(getResources(),R.id.icon);
    16. }
    这里用到一个自定义的根据资源图标id获取图片的函数,很简单,代码如下: Java代码
    1. /**
    2. *根据id获取一个图片
    3. *@paramres
    4. *@paramresId
    5. *@return
    6. */
    7. privateBitmapgetResIcon(Resourcesres,intresId){
    8. Drawableicon=res.getDrawable(resId);
    9. if(iconinstanceofBitmapDrawable){
    10. BitmapDrawablebd=(BitmapDrawable)icon;
    11. returnbd.getBitmap();
    12. }else{
    13. returnnull;
    14. }
    15. }
  5. 获取到图标之后就要对这个图标进行处理了,要为该图标加上联系人数量的覆盖,首先我们看获取联系人个数的函数。
    Java代码
    1. /**
    2. *获取联系人的个数
    3. *@return手里通讯录中联系人的个数
    4. */
    5. privateintgetContactCount(){
    6. Cursorc=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,newString[]{ContactsContract.Contacts._COUNT},null,null,null);
    7. try{
    8. c.moveToFirst();
    9. returnc.getInt(0);
    10. }catch(Exceptione){
    11. return0;
    12. }finally{
    13. c.close();
    14. }
    15. }
    这里采用Uri的方式获取联系人的cursor,然后获取个数。
  6. 有了图标和联系人个数就可以生成带联系人个数的图标了,我们看下生成的这个函数。
    Java代码
    1. /**
    2. *在给定的图片的右上角加上联系人数量。数量用红色表示
    3. *@paramicon给定的图片
    4. *@return带联系人数量的图片
    5. */
    6. privateBitmapgeneratorContactCountIcon(Bitmapicon){
    7. //初始化画布
    8. inticonSize=(int)getResources().getDimension(android.R.dimen.app_icon_size);
    9. Log.d(TAG,"theiconsizeis"+iconSize);
    10. BitmapcontactIcon=Bitmap.createBitmap(iconSize,iconSize,Config.ARGB_8888);
    11. Canvascanvas=newCanvas(contactIcon);
    12. //拷贝图片
    13. PainticonPaint=newPaint();
    14. iconPaint.setDither(true);//防抖动
    15. iconPaint.setFilterBitmap(true);//用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果
    16. Rectsrc=newRect(0,0,icon.getWidth(),icon.getHeight());
    17. Rectdst=newRect(0,0,iconSize,iconSize);
    18. canvas.drawBitmap(icon,src,dst,iconPaint);
    19. //在图片上创建一个覆盖的联系人个数
    20. intcontacyCount=getContactCount();
    21. //启用抗锯齿和使用设备的文本字距
    22. PaintcountPaint=newPaint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG);
    23. countPaint.setColor(Color.RED);
    24. countPaint.setTextSize(20f);
    25. countPaint.setTypeface(Typeface.DEFAULT_BOLD);
    26. canvas.drawText(String.valueOf(contacyCount),iconSize-18,25,countPaint);
    27. returncontactIcon;
    28. }
    注释的很详细,就不解释了,无非就是定义一个画布(Canvas),然后在上面画图标,画数字文本。
  7. 然后我们把得到的这个处理过的Bitmap放在我们在main.xml里定义的ImageView里展示就可以看到效果了.
    Java代码
    1. mImageView.setImageBitmap(contactCountIcon);
  8. 我们启动应用看看效果.

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

更多相关文章

  1. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  2. Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
  3. android 获取唯一标识
  4. android拍照与读取相册
  5. Android(安卓)热点开关状态的判断和获取热点ssid
  6. Android软键盘适配问题
  7. Android(安卓)P SystemUI之StatusBar UI布局status_bar.xml解析
  8. android 创建桌面快捷方式 、插件
  9. AIR Native Extension的使用(Android)一 : 打包ane

随机推荐

  1. android 横竖屏切换问题的解决方案
  2. findViewById()使用常见错误
  3. Android设备管理器漏洞分析!
  4. Android(安卓)2.3姜饼的API改变大全
  5. Android: EditText设置属性和设置输入规则
  6. 新书内容连载(2):Android(安卓)Activity的生
  7. Android开发1――查找所需要出示权限的内
  8. Android(安卓)webview与js 交换JSON对象
  9. android 语言设置
  10. Android数据可视化