`
Darar
  • 浏览: 87816 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android中为图标加上数字--用于未读短信数提醒等

阅读更多
在我们开发一些如短消息、应用商店等应用时,会考虑在短消息的图标上加上未读短信的数量,在应用商店上加上可以升级的应用数量,这样不占太大空间还能达到提示的目的。

本节eoe就以一个展示手机内联系人数量的例子来演示怎么在一个图标的上面加上数字的例子,也就是一个数字overlay。做过google map开发的知道overlay这个东西。

一:你可学到

1.手机内依据Uri查看联系人
2.权限的添加
3.获取手机内任意一款应用的应用图标
4.对图形的处理,如复制,为图片加上覆盖层--数字。
5.使用RemoteView自定义Notification


二:开始行动

1.新建名为NotificationIconCount的Android Project。附件中有最终版本的项目工程
2.首先修改AndroidManifest.xml,加入权限<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>,因为我们要读取联系人。
3.修改main.xml如下,这里定义一个ImageView,勇于预览我们处理好的加上数字的图标。
LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

03.     android:orientation="vertical"  

04.     android:layout_width="fill_parent"  

05.     android:layout_height="fill_parent"  

06.     >  

07.     <ImageView   

08.         android:id="@+id/icon"  

09.         android:layout_width="wrap_content"  

10.         android:layout_height="wrap_content"  

11.         android:scaleType="center"  

12.         android:adjustViewBounds="true"/>  

13.</LinearLayout>  

4.先来获取手机内通讯录的图标,如果没有获取到,则使用该应用的图标.

   super.onCreate(savedInstanceState);  

02.        setContentView(R.layout.main);  

03.        mImageView=(ImageView)findViewById(R.id.icon);  

04.        //优先采用联系人的图标,如果不存在则采用该应用的图标  

05.        Drawable contactIcon;  

06.        try {  

07.            contactIcon = getPackageManager().getApplicationIcon("com.android.contacts");  

08.        } catch (NameNotFoundException e) {  

09.            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获取图片的函数,很简单,代码如下:

 /** 

02.        * 根据id获取一个图片 

03.        * @param res 

04.        * @param resId 

05.        * @return 

06.        */  

07.       private Bitmap getResIcon(Resources res,int resId){  

08.        Drawable icon=res.getDrawable(resId);  

09.        if(icon instanceof BitmapDrawable){  

10.           BitmapDrawable bd=(BitmapDrawable)icon;  

11.           return bd.getBitmap();  

12.       }else{  

13.           return null;  

14.       }  

15.      }  

5.获取到图标之后就要对这个图标进行处理了,要为该图标加上联系人数量的覆盖,首先我们看获取联系人个数的函数。

 /** 

02.         * 获取联系人的个数 

03.         * @return 手里通讯录中联系人的个数 

04.         */  

05.        private int getContactCount(){  

06.            Cursor c=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, new String[]{ContactsContract.Contacts._COUNT}, null, null, null);  

07.            try{  

08.                c.moveToFirst();  

09.                return c.getInt(0);  

10.           }catch(Exception e){  

11.               return 0;  

12.           }finally{  

13.               c.close();  

14.           }  

15.       }  

这里采用Uri的方式获取联系人的cursor,然后获取个数。

6. 有了图标和联系人个数就可以生成带联系人个数的图标了,我们看下生成的这个函数。

  /** 

02.         * 在给定的图片的右上角加上联系人数量。数量用红色表示 

03.         * @param icon 给定的图片 

04.         * @return 带联系人数量的图片 

05.         */  

06.        private Bitmap generatorContactCountIcon(Bitmap icon){  

07.            //初始化画布  

08.            int iconSize=(int)getResources().getDimension(android.R.dimen.app_icon_size);  

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



分享到:
评论

相关推荐

    Android中为图标加上数字--用于未读短信数提醒

    这通常被用在未读短信数提醒、待更新应用数提示等场景,提升用户体验,使用户一眼就能看到有多少未处理的内容。在本教程中,我们将深入探讨如何在Android应用中实现这一功能。 首先,我们需要了解Android的通知系统...

    android-support-multidex-instrumentation.jar.zip

    3. 如果使用的是自定义的`Application`类并且目标设备是Android 5.0以下的版本,还需要在AndroidManifest.xml中为`&lt;application&gt;`标签添加`android:name="android.support.multidex.MultiDexApplication"`属性。...

    webrtc-android-codelab,尝试在android中为webrtc提供codelab-类似于web at的codelab.zip

    在“webrtc-android-codelab”中,我们可以找到一个实践教程,类似于Google开发者网站上的WebRTC Web codelab。这个codelab的目的在于帮助Android开发者了解如何在自己的应用中集成WebRTC技术。通过这个教程,开发者...

    android-support-v4-preferencefragment-master

    `PreferenceFragment`是Android系统提供的一种用于构建设置界面的组件,它允许开发者在Fragment中添加和管理各种偏好设置,比如开关、选择列表等。在API 21及以上版本,`PreferenceFragment`已经被原生支持,但在更...

    mipsel-linux-android-4.9(windows-64位)- 移动开发

    总结来说,`mipsel-linux-android-4.9`是Android NDK的一个组成部分,它允许Windows 64位用户在本地环境中为MIPS架构的Android设备编译原生代码。通过正确配置和使用这个工具链,开发者可以充分利用C/C++的性能优势...

    为图片加上数字效果 两种实现方式

    本文将详细介绍两种在Android中为图片加上数字效果的方法:一种是利用`RelativeLayout`布局,另一种则是通过生成位图进行绘制。 ### 1. 使用`RelativeLayout`方法 `RelativeLayout`是Android中的一个布局容器,它...

    android-support-v7-appcompat-master

    《深入解析Android Support Library v7 AppCompat》 在Android应用开发中,为了兼容不同版本的Android系统,开发者经常需要利用Android Support Library。其中,v7 appcompat库是至关重要的一个部分,它允许开发者...

    安卓Android源码——数字标识控件.zip

    在安卓(Android)开发中,数字标识控件是一种常见的UI元素,用于显示数字或进行计数操作。在这款"安卓Android源码——数字标识控件.zip"中,开发者可能包含了自定义数字标识控件的源代码,以实现特定的功能或者视觉...

    android-support-v7-appcompat.zip

    在Android开发中,`android-support-v7-appcompat`库是一个至关重要的组件,它极大地扩展了Android API的功能,使得开发者能够在更早的Android版本上实现一些高版本特性。这个库是Android Support Library系列的一...

    各种图标,灯-鼠标-按钮-png-jpg

    在IT行业中,图标、灯、鼠标和按钮等元素是用户界面设计的重要组成部分,尤其是在软件开发中。本资源包“各种图标,灯-鼠标-按钮-png-jpg”显然是一个包含这些元素图形素材的集合,主要格式为PNG和JPG,还有部分可能...

    android自定义全键盘随机(包含字母+标点符号+数字)

    这个“android自定义全键盘随机(包含字母+标点符号+数字)”项目提供了一个解决方案,它能够适应各种Android手机系统,为用户提供一个全面的、可自定义的输入界面。 首先,我们来探讨自定义键盘的基本概念。在...

    Android中为EditText添加边框的代码清单.pdf

    本文将详细阐述如何在Android中为EditText添加边框,并提供相关的代码清单。 1. **使用XML属性添加边框** 在Android中,可以通过修改`res/layout/activity_main.xml`布局文件中的EditText属性来添加边框。主要使用...

    Android-AndroidIn-AppBillingv3Library开发者通过Androidv3API轻松处理应用程序支付问题

    2. **集成Library**:将anjlab-android-inapp-billing-v3-88f7efa库导入到项目中,确保依赖正确配置。 3. **初始化**:在应用启动时,初始化`BillingClient`并建立连接,以便进行后续操作。 4. **查询商品**:使用`...

    android-GridView-事件-Intent-传递参数1.rar

    通过设置`android:numColumns`属性可以指定列数,例如在本例中为3。 2. **数据绑定**: GridView的数据展示是通过实现Adapter接口的类来完成的,常见的有BaseAdapter、SimpleAdapter或CursorAdapter。开发者需要在...

    Android应用小实例--跟随手指的小球 .

    最后,为了让用户能清晰看到手指与小球的关联,可能需要设置透明背景,这可以通过在布局文件中为`SimpleDrawView`设置`android:background="@android:color/transparent"`来实现。 总结起来,"Android应用小实例--...

    Android-KustomerAndroidSDK-在Android应用中为您的客户提供支持

    **Android-KustomerAndroidSDK-在Android应用中为您的客户提供支持** Kustomer Android SDK 是一个专门为开发者设计的工具,旨在帮助他们在Android应用程序中集成强大的客户服务功能。这个SDK使得开发者能够轻松地...

    android多个图标显示在桌面上

    在Android系统中,一个应用程序通常有一个主入口Activity,它的图标会出现在用户桌面上,供用户点击启动应用。然而,有时开发者可能希望为同一个应用创建多个入口点,以便提供不同的功能或者展示不同的界面,这就...

    android-ui-master

    在Android开发中,UI设计和交互是至关重要的部分,尤其是对于用户操作反馈的动画效果。"android-ui-master"这个项目显然关注的是Android平台上的界面元素动画,特别是返回按钮的旋转和按钮转动效果。这些动画可以...

    Android开发-DesignDemo-AndroidStudio(六)CoordinatorDemo(1)

    在Android开发中,"CoordinatorDemo"是一个典型的布局设计示例,它主要展示了如何使用`CoordinatorLayout`这个组件来实现高级的界面交互效果。`CoordinatorLayout`是Android Design Support Library的一部分,它提供...

    安卓(Android)期末课程设计-私人日记.zip

    【安卓(Android)期末课程设计-私人日记】 本项目是一个基于Android平台的私人日记应用程序,旨在帮助学生理解和实践Android开发中的关键概念和技术。这个课程设计适用于正在学习Android开发的初级到中级水平的...

Global site tag (gtag.js) - Google Analytics