先上代码:package com.andy.oschina_android.widget;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapSha ...
先上代码:
package com.andy.oschina_android.widget;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.RectF;import android.graphics.Shader;import android.util.AttributeSet;import android.view.View;public class CircleImageView extends View { private Paint mPaint; private RectF mBound; private Bitmap mImageBitmap; private float mRadius; 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); mBound = new RectF(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int vw,vh; vw = vh =0; int iw,ih; if(mImageBitmap==null){ iw = ih = 0; }else{ iw = mImageBitmap.getWidth(); ih = mImageBitmap.getHeight(); } int size = Math.min(iw,ih); setMeasuredDimension(size,size); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { if(w!=oldw||h!=oldh){ /** * 设置边界,剧中显示 */ int iw,ih; if(mImageBitmap==null){ iw = ih = 0; }else{ iw = mImageBitmap.getWidth(); ih = mImageBitmap.getHeight(); } int size = Math.min(getHeight(),getWidth()); mBound.set(0,0,size,size); mRadius = size/2; if(mPaint.getShader()!=null){ Matrix m = new Matrix(); if(iw>ih){ m.setTranslate((iw-ih)/2,0); }else{ m.setTranslate(0,(ih-iw)/-2); } mPaint.getShader().setLocalMatrix(m); } } } @Override protected void onDraw(Canvas canvas) { if(mImageBitmap!=null) { canvas.drawRoundRect(mBound, mRadius, mRadius, mPaint); } } /** * 由图片决定View的大小 * @param bitmap */ public void setImageBitmap(Bitmap bitmap){ if(bitmap!=mImageBitmap){ mImageBitmap = bitmap; if(bitmap!=null) { BitmapShader bs = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mPaint.setShader(bs); }else{ mPaint.setShader(null); } requestLayout(); } }}
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:自定义控件之圆头像
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。