国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android圖像處理之繪制圓形、三角形及扇形的頭像

2019-12-12 02:59:57
字體:
來源:轉載
供稿:網友

前言

相信大家在Android日常開發中,繪制圓形和繪制圖片都是很容易的事情,但是繪制圓形圖片就有點難倒人了。以前為了偷懶就直接去github上找一個開源項目,后來才發現繪制圓形圖片其實也是很簡單的事。

繪制圓形圖片也需要兩個步驟:

繪制圓形和繪制圖片,只不過要讓它們取并集,得到的結果就是一張圓形圖片了。

直接上代碼:

public class CircleImageView extends View { private Paint mPaint; private Paint mTargetPaint; private Bitmap mSourceBitmap; private Bitmap mTargetBitmap; private Canvas mTargetCanvas; private int mWidth; private int mHeight; public CircleImageView(Context context) {  this(context, null); } public CircleImageView(Context context, AttributeSet attrs) {  this(context, attrs, 0); } public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  init(); } private void init() {  mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);  mTargetPaint = new Paint(Paint.ANTI_ALIAS_FLAG);  mTargetPaint.setXfermode(new PorterDuffXfermode(SRC_IN));  mSourceBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.xiaojiangshi);  mTargetBitmap = Bitmap.createBitmap(mSourceBitmap.getWidth(), mSourceBitmap.getHeight(), Bitmap.Config.ARGB_8888);  mTargetCanvas = new Canvas(mTargetBitmap); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {  super.onSizeChanged(w, h, oldw, oldh);  mWidth = w;  mHeight = h; } @Override protected void onDraw(Canvas canvas) {  // 生成圓形Bitmap過程.  int radius = Math.min(mWidth, mHeight) / 2;  // 先繪制圓形  mTargetCanvas.drawCircle(mWidth / 2, mHeight / 2, radius, mPaint);  // 再繪制Bitmap  mTargetCanvas.drawBitmap(mSourceBitmap, 0, 0, mTargetPaint);  canvas.drawBitmap(mTargetBitmap, 0, 0, null); }}

效果如下:


代碼中最關鍵的就是這句:

mTargetPaint.setXfermode(new PorterDuffXfermode(SRC_IN));

SRC_IN這種模式可以讓兩個繪制的效果取交集后展現出來,需要注意的是,dst需要先繪制,再繪制src,拿上面例子來說,就是要先繪制圓形,在繪制Bitmap,如果順序顛倒了,你就只能看到一個圓形了。

除了SRC_IN這種模式外,還有其它15種模式。有興趣的可以自己試試看效果。在官方提供的APIDemo中可以找到相應的代碼。


知道這個原理之后,我們就能繪制各種形狀的圖片了,只需要繪制不同的形狀代替繪制圓形這一步驟就可以了。

三角形:

mPath.reset();mPath.moveTo(mWidth / 2, 0);mPath.lineTo(0, mHeight);mPath.lineTo(mWidth, mHeight);mPath.close();mTargetCanvas.drawPath(mPath, mPaint);

扇形:

RectF rectF = new RectF(0, 0, mWidth, mHeight);mTargetCanvas.drawArc(rectF, 210, 120, true, mPaint);


總結

以上就是這篇文章的全部內容了,希望本文的內容對各位Android開發者們能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 民丰县| 措美县| 瑞金市| 祁连县| 恭城| 闻喜县| 霍林郭勒市| 海淀区| 霍山县| 东乡族自治县| 石台县| 淮北市| 微博| 浙江省| 彩票| 陇川县| 定结县| 四会市| 南安市| 信宜市| 溧阳市| 奉贤区| 佛教| 沛县| 卢湾区| 德钦县| 阿克陶县| 肃南| 连江县| 新昌县| 随州市| 吉林省| 屏南县| 河间市| 临安市| 南华县| 霍州市| 凤山县| 孝义市| 金阳县| 吉木乃县|