亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2017年04月25日 15:31:37   作者:Android雜貨鋪  
這篇文章主要給大家介紹了Android圖像處理之繪制圓形、三角形及扇形頭像的相關(guān)資料,文中給出了詳細(xì)的代碼示例,通過(guò)學(xué)會(huì)了文中的方法,就不局限于圓形頭像了,剛興趣的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。

前言

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

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

繪制圓形和繪制圖片,只不過(guò)要讓它們?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過(guò)程.
  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);
 }
}

效果如下:


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

mTargetPaint.setXfermode(new PorterDuffXfermode(SRC_IN));

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

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


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

三角形:

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


總結(jié)

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

相關(guān)文章

最新評(píng)論