,因为我们要读取联" />

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

系统 1606 0

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},  null null null );  
    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( 0 0 , icon.getWidth(), icon.getHeight());  
    18.         Rect dst= new  Rect( 0 0 , 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- 18 25 , countPaint);  
    29.          return  contactIcon;  
    30.     }  
     注释的很详细,就不解释了,无非就是定义一个画布(Canvas),然后在上面画图标,画数字文本。
  7. 然后我们把得到的这个处理过的Bitmap放在我们在main.xml里定义的ImageView里展示就可以看到效果了.
    Java代码   收藏代码
    1. mImageView.setImageBitmap(contactCountIcon);  
     
  8. 我们启动应用看看效果.

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

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论