標籤:bitmap imageview
先來說一下FontMetrics這個類,這個類是關於字元屬性和測量的類
用圖可以更精確的知道各個屬性的含義:
我們在Layout中有一個ImageView,我們可以通過:
<span style="white-space:pre"></span>ImageView item_image = (ImageView)findViewById(R.id.item_image);item_image.setImageBitmap(makeMessageCenterIcon());
這種方式來把bitmap來填入ImageView
下面做一個這種效果的,特別適合有訊息通知的icon:
代碼可以這樣來寫:
protected Bitmap makeMessageCenterIcon(){int mMsgCnt = 4;Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.desktop_messageicon);if(icon == null){return icon;}//make notice iconif(mMsgCnt > 0) {Bitmap noticeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.notice_count_bg);if(noticeIcon != null){int h = noticeIcon.getHeight();int w = noticeIcon.getWidth();Bitmap noticeIconBmp = Bitmap.createBitmap(w, h, Config.ARGB_8888);//noticeIconBmp是最終需要的畫字的bitmapCanvas noticeCanvas = new Canvas(noticeIconBmp);Paint noticeCntpaint = new Paint();noticeCntpaint.setAntiAlias(true);noticeCanvas.drawBitmap(noticeIcon, 0, 0, noticeCntpaint);noticeCntpaint.setTextAlign(Align.CENTER);noticeCntpaint.setColor(getResources().getColor(R.drawable.white));FontMetrics fontMetrics = noticeCntpaint.getFontMetrics(); float x = noticeIcon.getWidth() / 2;float y = (noticeIcon.getHeight() - fontMetrics.ascent) / 2 - 2; //fontMetrics是在baseline以上的字元最高處的位置noticeCanvas.drawText(String.valueOf(mMsgCnt), x, y, noticeCntpaint); //在canvas上的(x,y)的位置上寫mMsgCnt//draw notice icon onto message iconh = icon.getHeight();w = icon.getWidth();Bitmap iconBmp = Bitmap.createBitmap(w, h, Config.ARGB_8888);Canvas canvas = new Canvas(iconBmp);Paint paint = new Paint();paint.setAntiAlias(true);canvas.drawBitmap(icon, 0, 0, paint);float left = icon.getWidth() - noticeIcon.getWidth();float top = 0;canvas.drawBitmap(noticeIconBmp, left, top, paint);return iconBmp;}}return icon;}
android在如果繪製自訂的bitmap,然後返回給ImageView