• Android 图标上面添加提醒(一)使用Canvas绘制


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

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

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

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

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

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

    效果图:

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

    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.    }    


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

      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. }   
  • 相关阅读:
    【LeetCode & 剑指offer刷题】动态规划与贪婪法题13:Coin Change(系列)
    【LeetCode & 剑指offer刷题】动态规划与贪婪法题12:Jump Game(系列)
    【LeetCode & 剑指offer刷题】动态规划与贪婪法题11:121. Best Time to Buy and Sell Stock(系列)
    【LeetCode & 剑指offer刷题】动态规划与贪婪法题10:Longest Increasing Subsequence
    linux安装rabbitmq
    微服务-springboot-读写分离(多数据源切换)
    微服务-springboot-rabbitmq:实现延时队列
    java-NIO-DatagramChannel(UDP)
    java-NIO-FileChannel(文件IO)
    java-NIO-概念
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/3737976.html
Copyright © 2020-2023  润新知