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

首頁 > 系統(tǒng) > Android > 正文

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

2019-10-23 18:30:17
字體:
供稿:網(wǎng)友

前言

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

繪制圓形圖片也需要兩個(gè)步驟:

繪制圓形和繪制圖片,只不過要讓它們?nèi)〔⒓玫降慕Y(jié)果就是一張圓形圖片了。

直接上代碼:

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); }}

效果如下:

android,繪制圓形頭像,android繪制扇形圖,android圓形頭像

代碼中最關(guān)鍵的就是這句:

mTargetPaint.setXfermode(new PorterDuffXfermode(SRC_IN));

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

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

android,繪制圓形頭像,android繪制扇形圖,android圓形頭像

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

三角形:

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

android,繪制圓形頭像,android繪制扇形圖,android圓形頭像

扇形:

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

android,繪制圓形頭像,android繪制扇形圖,android圓形頭像

總結(jié)

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


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌审旗| 天门市| 荆州市| 栾川县| 大关县| 九龙坡区| 平陆县| 江陵县| 库车县| 和田县| 芦溪县| 鄱阳县| 宝兴县| 道孚县| 永登县| 西乌| 尼玛县| 行唐县| 延安市| 青海省| 施秉县| 盈江县| 德清县| 靖江市| 公安县| 平果县| 若尔盖县| 浪卡子县| 高雄市| 长丰县| 正定县| 邵东县| 北票市| 肃北| 泾川县| 纳雍县| 清丰县| 肥乡县| 崇左市| 汝州市| 洛阳市|