標籤:android class blog c java tar
在我們開發一些如通訊錄、社交等應用或者應用添加新功能模組時,會考慮在對應的表徵圖上加上未讀資訊的數量,或者是新功能提醒的表徵圖,這樣不佔太大空間還能達到提示的目的.
之前在MMS分析部分,也有人問過我這種提醒的實現. 關於這種提醒的添加,我總結了下,有大概幾種方法可以實現:
1. 在對應的布局放置TextView或者ImageView.
2. 用Canvas在原來Icon的bitmap基礎上進行繪製
3. 利用開源項目ViewBadger進行添加,很方便,而且相對靈活
第一種方法只是調整下布局.這裡不再講述,直接看第二種方法:
:
這裡用到一個自訂的根據資源表徵圖id擷取圖片的函數,很簡單,代碼如下:
[java] view plaincopy
- /**
- * 根據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;
- }
- }
擷取到表徵圖之後就要對這個表徵圖進行處理了,要為該表徵圖加上數量的覆蓋
[java] view plaincopy
- /**
- * 在給定的圖片的右上方加上數量
- * @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;
- }