Android 圓形頭像 自己動手

aaronyan1990發表於2015-01-05

圓形頭像DIY

現在大部分app使用的都是圓形頭像,網上開源的也很多,但是有沒有考慮過DIY圓形頭像呢?下面就自己實現一個,先看下demo展示

  

第一步:原理解釋(圖片很醜,原理很真)

   1、畫外框圓形,需要使用自定義的顏色畫一個圓形,比圖片的半徑長5dp


 2、自定義圓形畫好了後,將我們需要轉換成圓形頭像的圖片畫到上面,從中間開始覆蓋,得到如下圖片

 

 3、中間擷取圖片,半徑設定為:r=min(width,height),圓心設為:cx=width/2,cy=height/2,這樣可以從中間開始擷取圓形圖片

第二步、程式碼實現

 1、首先繼承ImageView

 2、重寫onDraw(Canvas canvas)方法

 3、設定圖片縮放型別setScaleType(ScaleType.CENTER_CROP); 中間擷取

具體程式碼如下:

@Override
	protected void onDraw(Canvas canvas) {
		// super.onDraw(canvas);
		setScaleType(ScaleType.CENTER_CROP);
		Drawable drawable = getDrawable();

		if (null == drawable) {
			return;
		}

		// 將drawable轉換成bitmap==>網上找的
		Bitmap bitmap = Bitmap
				.createBitmap(
						drawable.getIntrinsicWidth(),
						drawable.getIntrinsicHeight(),
						drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
								: Bitmap.Config.RGB_565);

		Canvas srcCanvas = new Canvas(bitmap);

		drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
				drawable.getIntrinsicHeight());

		drawable.draw(srcCanvas);

		float cx = getWidth() / 2;
		float cy = getHeight() / 2;

		float radius = Math.min(getWidth(), getHeight()) / 2;

		Paint borderPaint = new Paint();
		borderPaint.setAntiAlias(true);
		borderPaint.setColor(Color.GREEN);

		canvas.drawCircle(cx, cy, radius, borderPaint);

		// 畫圖
		BitmapShader shader = new BitmapShader(bitmap, TileMode.CLAMP,
				TileMode.CLAMP);
		Paint paint = new Paint();
		paint.setShader(shader);
		paint.setAntiAlias(true);
		canvas.drawCircle(cx, cy, radius - 5, paint);

	}

程式碼只是簡單的demo,當然可以定製成通用的CircleImageView,需要根據自己的需求DIY!!





轉載於:https://www.cnblogs.com/cmlblog/p/7663134.html

相關文章