Android 图标上面添加提醒

来源:互联网 发布:中国移动的4g网络制式 编辑:程序博客网 时间:2024/05/02 18:50

(一)使用Canvas绘制

在我们开发一些如通讯录、社交等应用或者应用添加新功能模块时,会考虑在对应的图标上加上未读信息的数量,或者是新功能提醒的图标,这样不占太大空间还能达到提示的目的.

   之前在MMS分析部分,也有人问过我这种提醒的实现. 关于这种提醒的添加,我总结了下,有大概几种方法可以实现:

1. 在对应的布局放置TextView或者ImageView.

2. 用Canvas在原来Icon的bitmap基础上进行绘制

3. 利用开源项目ViewBadger进行添加,很方便,而且相对灵活


第一种方法只是调整下布局.这里不再讲述,直接看第二种方法:

效果图:




这里用到一个自定义的根据资源图标id获取图片的函数,很简单,代码如下:

[java] view plaincopy
  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.    }    

获取到图标之后就要对这个图标进行处理了,要为该图标加上数量的覆盖

[java] view plaincopy
  1. /**  
  2.  * 在给定的图片的右上角加上数量  
  3.  * @param icon 给定的图片  
  4.  */    
  5. private Bitmap generatorContactCountIcon(Bitmap icon){    
  6.     //初始化画布    
  7.     int iconSize=(int)getResources().getDimension(android.R.dimen.app_icon_size);    
  8.     Log.d(TAG, "the icon size is "+iconSize);    
  9.     Bitmap contactIcon=Bitmap.createBitmap(iconSize, iconSize, Config.ARGB_8888);    
  10.     Canvas canvas=new Canvas(contactIcon);    
  11.         
  12.     //拷贝图片    
  13.     Paint iconPaint=new Paint();    
  14.     iconPaint.setDither(true);//防抖动    
  15.     iconPaint.setFilterBitmap(true);//用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果    
  16.     Rect src=new Rect(00, icon.getWidth(), icon.getHeight());    
  17.     Rect dst=new Rect(00, iconSize, iconSize);    
  18.     canvas.drawBitmap(icon, src, dst, iconPaint);    
  19.         
  20.     
  21.     //启用抗锯齿和使用设备的文本字距    
  22.     Paint countPaint=new Paint(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(count), iconSize-1825, countPaint);    
  27.     return contactIcon;    
  28. }    
(二)使用开源UI类库 Viewbadger


上一篇讲到用canvas进行绘制得到对应最终的bitmap. 在实际应用中,我们除了给图标添加数字外,也有可能加一些红色方块之类的图标作为新功能的提醒.

那么有没有什么方法,很方便地给图标添加提醒icon或者数字呢? 

有的,还是得借助于开源项目ViewBadger,这个是github上的地址:

https://github.com/jgilfelt/android-viewbadger

还是先看下效果图:



其用法非常简单:

首先是添加数字:

[java] view plaincopy
  1.                BadgeView badgeView = new BadgeView(MainActivity.this, iv1);  
  2.                badgeView.setText("5");  
  3.                badgeView.show();  

然后是添加文字:

[java] view plaincopy
  1.               BadgeView badgeView = new BadgeView(MainActivity.this, iv2);  
  2. badgeView.setText("新消息");  
  3. badgeView.setTextSize(8.5f);  
  4. badgeView.setTextColor(Color.DKGRAY);  
  5. badgeView.show();  

最后是添加特定图标,只需对应drawable的id即可

[java] view plaincopy5983875
  1.               BadgeView badgeView2 = new BadgeView(MainActivity.this, iv3);  
  2. badgeView2.setBackgroundResource(R.drawable.noread);  
  3. badgeView2.show();  

隐藏/去掉提醒图标或者数字(同正常View隐藏的方法);

[java] view plaincopy
  1. badgeView.setVisibility(View.GONE);  

 怎么样,只要是View对象即可添加提醒图标或者数字,是不是很方便,.赶紧用一下吧.


源码下载地址:

http://download.csdn.net/detail/huluhong/8021481


0 0