博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 图标上面添加提醒(一)使用Canvas绘制
阅读量:4175 次
发布时间:2019-05-26

本文共 2019 字,大约阅读时间需要 6 分钟。

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

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

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

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

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

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

效果图:

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

/**         * 根据id获取一个图片         * @param res         * @param resId         * @return         */         private Bitmap getResIcon(Resources res,int resId){          Drawable icon=res.getDrawable(resId);          if(icon instanceof BitmapDrawable){              BitmapDrawable bd=(BitmapDrawable)icon;              return bd.getBitmap();          }else{              return null;          }         }
获取到图标之后就要对这个图标进行处理了,要为该图标加上数量的覆盖

/**          * 在给定的图片的右上角加上数量          * @param icon 给定的图片          */          private Bitmap generatorContactCountIcon(Bitmap icon){              //初始化画布              int iconSize=(int)getResources().getDimension(android.R.dimen.app_icon_size);              Log.d(TAG, "the icon size is "+iconSize);              Bitmap contactIcon=Bitmap.createBitmap(iconSize, iconSize, Config.ARGB_8888);              Canvas canvas=new Canvas(contactIcon);                            //拷贝图片              Paint iconPaint=new Paint();              iconPaint.setDither(true);//防抖动              iconPaint.setFilterBitmap(true);//用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果              Rect src=new Rect(0, 0, icon.getWidth(), icon.getHeight());              Rect dst=new Rect(0, 0, iconSize, iconSize);              canvas.drawBitmap(icon, src, dst, iconPaint);                                      //启用抗锯齿和使用设备的文本字距              Paint countPaint=new Paint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG);              countPaint.setColor(Color.RED);              countPaint.setTextSize(20f);              countPaint.setTypeface(Typeface.DEFAULT_BOLD);              canvas.drawText(String.valueOf(count), iconSize-18, 25, countPaint);              return contactIcon;          }
如有转载,请声明出处: 时之沙:

你可能感兴趣的文章
Oracle PL/SQL之嵌套表(Nested Table)
查看>>
Oracle PL/SQL之令人不解的提示(nls_date_format)
查看>>
Oracle PL/SQL之GROUP BY ROLLUP
查看>>
Oracle PL/SQL之GROUP BY CUBE
查看>>
蓝桥杯2018省赛 - A3 乘积尾零
查看>>
蓝桥杯2018省赛 - A4 第几个幸运数
查看>>
命令窗口中javac(即javac.exe)不可用的原因
查看>>
如何完全卸载VS2010
查看>>
【算法概论】分治算法:计算数组中的逆序对
查看>>
【算法概论】分治算法:查找中位数
查看>>
【算法概论】分治算法:k路归并
查看>>
Python debug 一
查看>>
向量vector的初始化
查看>>
android数据存储与访问之使用pull解析器
查看>>
Android 短信模块分析(七) MMS数据库定义及结构整理
查看>>
Android 短信模块分析(八) MMS数据库表关系
查看>>
Android 图标上面添加提醒(二)使用开源UI类库 Viewbadger
查看>>
Android 图标上面添加提醒(一)使用Canvas绘制
查看>>
Android WebView加载Html右边空白问题的解决方案
查看>>
Android 仿网易新闻v3.5:上下滑动的引导页
查看>>