Android 表徵圖上面添加提醒(一)使用Canvas繪製

來源:互聯網
上載者:User

標籤:android   class   blog   c   java   tar   

在我們開發一些如通訊錄、社交等應用或者應用添加新功能模組時,會考慮在對應的表徵圖上加上未讀資訊的數量,或者是新功能提醒的表徵圖,這樣不佔太大空間還能達到提示的目的.

   之前在MMS分析部分,也有人問過我這種提醒的實現. 關於這種提醒的添加,我總結了下,有大概幾種方法可以實現:

1. 在對應的布局放置TextView或者ImageView.

2. 用Canvas在原來Icon的bitmap基礎上進行繪製

3. 利用開源項目ViewBadger進行添加,很方便,而且相對靈活

 

第一種方法只是調整下布局.這裡不再講述,直接看第二種方法:

 

 

這裡用到一個自訂的根據資源表徵圖id擷取圖片的函數,很簡單,代碼如下:

[java] view plaincopy
  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.    }    


擷取到表徵圖之後就要對這個表徵圖進行處理了,要為該表徵圖加上數量的覆蓋

[java] view plaincopy
    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(0, 0, icon.getWidth(), icon.getHeight());    
    17.     Rect dst=new Rect(0, 0, 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-18, 25, countPaint);    
    27.     return contactIcon;    
    28. }   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.