剛做一個應用,UI設計的效果是需要在Android中用已有的圖片畫出一個矩形圖形,並且要在圖形上寫不同的字樣。
參考了上面的博文,制定的實現思路如下:
1、創建一個drawable對象,一個輸出的Bitmap並以此創建一個畫布
//根據源文件新建一個darwable對象
Drawable imageDrawable = getResources().getDrawable(id);
// 新建一個新的輸出圖片
Bitmap output = Bitmap.createBitmap(169, 169, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
2、創建圓角矩形
// 新建一個矩形
RectF outerRect = new RectF(0, 0, 169, 169);
// 產生一個紅色的圓角矩形 或者任何有色顏色,不能是透明!
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.RED);
canvas.drawRoundRect(outerRect, 10, 10, paint);
3、在矩形上畫圖形
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
imageDrawable.setBounds(0, 0, 169, 169);
imageDrawable.draw(canvas);
4、寫字
paint.setTextSize(24);
paint.setColor(Color.WHITE);
paint.setTextAlign(Paint.Align.CENTER);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
canvas.drawText(s , 85 , 159 , paint);
這樣,就完成了想要的效果。
這是調用了9次,每一次用不同的背景圖。
總結,在上面的實現過程中,使用了兩次 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
不過(PorterDuff.Mode.SRC_ATOP)並不相同。而實現的關鍵正在此處!
先看不同的Mode值是代表了什麼樣的效果。但在此之前,需明確兩個變量:dst,src(dst是畫布原有的圖形,src是新畫上去的圖形)。
因此這就是我的實現邏輯:
先畫圓角矩形,這時圓角矩形是dst,然後畫圖形,圖形是src,使用Mode是srcIn,這樣就形成了圓角矩形;
接下來,圓角矩形圖形是dst,然後畫文字,文字是src,使用Mode是srcATop,這樣就形成了在圓角圖形上寫字的效果。