溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2020-10-13 09:06:18 來源:腳本之家 閱讀:121 作者:Android雜貨鋪 欄目:移動開發(fā)

前言

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

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

繪制圓形和繪制圖片,只不過要讓它們?nèi)〔⒓?,得到的結(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圖像處理之繪制圓形、三角形及扇形的頭像

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

mTargetPaint.setXfermode(new PorterDuffXfermode(SRC_IN));

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

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

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

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

三角形:

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

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

扇形:

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

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

總結(jié)

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI