2011.09.13(2)——— android 图标上面添加数字
16lz
2021-01-23
2011.09.13(2)——— android 图标上面添加数字
参考:http://flysnow.iteye.com/blog/906770
- 新建名为NotificationIconCount的Android Project。
- 首先修改AndroidManifest.xml,加入权限<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>,因为我们要读取联系人。
- 修改main.xml如下,这里定义一个ImageView,勇于预览我们处理好的加上数字的图标。
Xml代码- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <ImageView
- android:id="@+id/icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:scaleType="center"
- android:adjustViewBounds="true"/>
- </LinearLayout>
- 先来获取手机内通讯录的图标,如果没有获取到,则使用该应用的图标.
Java代码- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mImageView=(ImageView)findViewById(R.id.icon);
- //优先采用联系人的图标,如果不存在则采用该应用的图标
- DrawablecontactIcon;
- try{
- contactIcon=getPackageManager().getApplicationIcon("com.android.contacts");
- }catch(NameNotFoundExceptione){
- contactIcon=null;
- }
- Bitmapicon;
- if(contactIconinstanceofBitmapDrawable){
- icon=((BitmapDrawable)contactIcon).getBitmap();
- }else{
- icon=getResIcon(getResources(),R.id.icon);
- }
- /**
- *根据id获取一个图片
- *@paramres
- *@paramresId
- *@return
- */
- privateBitmapgetResIcon(Resourcesres,intresId){
- Drawableicon=res.getDrawable(resId);
- if(iconinstanceofBitmapDrawable){
- BitmapDrawablebd=(BitmapDrawable)icon;
- returnbd.getBitmap();
- }else{
- returnnull;
- }
- }
- 获取到图标之后就要对这个图标进行处理了,要为该图标加上联系人数量的覆盖,首先我们看获取联系人个数的函数。
Java代码- /**
- *获取联系人的个数
- *@return手里通讯录中联系人的个数
- */
- privateintgetContactCount(){
- Cursorc=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,newString[]{ContactsContract.Contacts._COUNT},null,null,null);
- try{
- c.moveToFirst();
- returnc.getInt(0);
- }catch(Exceptione){
- return0;
- }finally{
- c.close();
- }
- }
- 有了图标和联系人个数就可以生成带联系人个数的图标了,我们看下生成的这个函数。
Java代码- /**
- *在给定的图片的右上角加上联系人数量。数量用红色表示
- *@paramicon给定的图片
- *@return带联系人数量的图片
- */
- privateBitmapgeneratorContactCountIcon(Bitmapicon){
- //初始化画布
- inticonSize=(int)getResources().getDimension(android.R.dimen.app_icon_size);
- Log.d(TAG,"theiconsizeis"+iconSize);
- BitmapcontactIcon=Bitmap.createBitmap(iconSize,iconSize,Config.ARGB_8888);
- Canvascanvas=newCanvas(contactIcon);
- //拷贝图片
- PainticonPaint=newPaint();
- iconPaint.setDither(true);//防抖动
- iconPaint.setFilterBitmap(true);//用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果
- Rectsrc=newRect(0,0,icon.getWidth(),icon.getHeight());
- Rectdst=newRect(0,0,iconSize,iconSize);
- canvas.drawBitmap(icon,src,dst,iconPaint);
- //在图片上创建一个覆盖的联系人个数
- intcontacyCount=getContactCount();
- //启用抗锯齿和使用设备的文本字距
- PaintcountPaint=newPaint(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(contacyCount),iconSize-18,25,countPaint);
- returncontactIcon;
- }
- 然后我们把得到的这个处理过的Bitmap放在我们在main.xml里定义的ImageView里展示就可以看到效果了.
Java代码- mImageView.setImageBitmap(contactCountIcon);
- 我们启动应用看看效果.
我们看到了,右上角红色的1代表我手机中有一个联系人
更多相关文章
- Android 本地代码中的LIKELY和UNLIKELY宏
- Cocos2dx android 部分代码的理解
- 【Android】内嵌html页面与native代码简单交互
- Android代码混淆常见配置
- Android 的http通信(原生代码)
- [Android] 一份代码,两个版本
- Android一键锁屏代码
- Android 修改app图标和名称的方法