图片圆角和圆形

1.圆形图片
public class CricleImageView extends ImageView {
 private String TAG = "CricleImageView";
 
 private Paint mPaint;
 private int measuredWidth;
 private int measuredHeight;
 public CricleImageView(Context context, AttributeSet attrs) {
  super(context, attrs);
  mPaint = new Paint();
  mPaint.setAntiAlias(true);
 }
 
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  measuredWidth = getMeasuredWidth();
  measuredHeight = getMeasuredHeight();
  int width = Math.min(measuredWidth, measuredHeight);
  setMeasuredDimension(width, width);
 }  
 
 @Override
 protected void onDraw(Canvas canvas) {
  Drawable drawable = getDrawable();
  if(drawable != null){
   Bitmap bitmap = Bitmap.createBitmap(getWidth(),getHeight(),Config.ARGB_8888);
   Canvas drawCanvas = new Canvas(bitmap);
   float scale = getWidth() * 1.0f/ Math.min(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
   
   Log.d(TAG, "measuredWidth  : " + drawable.getIntrinsicWidth());
   Log.d(TAG, "measuredHeight  : " + drawable.getIntrinsicHeight());
   Log.d(TAG, "scale  : " + scale);
   Log.d(TAG, "getWidth()  : " + getWidth());
   Log.d(TAG, "getHeight()  : " + getHeight());
   
   drawable.setBounds(0, 0, (int)(drawable.getIntrinsicWidth() * scale), (int)(drawable.getIntrinsicHeight() * scale));
   drawable.draw(drawCanvas);
   
   //获取图片的形状
   Bitmap bmp = getBitMap();
   
   mPaint.reset();
   mPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
   drawCanvas.drawBitmap(bmp, 0, 0, mPaint);
   
   canvas.drawBitmap(bitmap, 0, 0, null);
  }
 }
 
 Bitmap getBitMap(){
  Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888);
  Canvas canvas = new Canvas(bitmap);
  Paint paint = new Paint();
  paint.setColor(Color.BLACK);
  paint.setAntiAlias(true);
  canvas.drawCircle(getWidth() / 2, getHeight() / 2, Math.min(getWidth() / 2, getHeight() / 2), paint);
  return bitmap;
 }
}
 
 
 
2.圆角图片
public class RoundImageView extends ImageView {

	private Paint mPaint;
	private PorterDuffXfermode xfermode;
	private WeakReference<Bitmap> mBitmap;
	
	public RoundImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}

	private void init() {
		mPaint = new Paint();
		mPaint.setAntiAlias(true);
		xfermode = new PorterDuffXfermode(Mode.DST_IN);
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		Drawable drawable = getDrawable();
		if(drawable != null){
			Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888);
			Canvas drawCanvas = new Canvas(bitmap);
			
			int dWidth = drawable.getIntrinsicWidth();
			int dHeigh = drawable.getIntrinsicHeight();
			float scale = Math.max(getWidth() * 1.0f / dWidth , getHeight() * 1.0f / dHeigh);
			drawable.setBounds(0, 0, (int)(dWidth * scale), (int)(dHeigh * scale));
			
			drawable.draw(drawCanvas);
			Bitmap bmp = null;
			if(mBitmap == null){
				bmp = getBitmap();
				mBitmap = new WeakReference<Bitmap>(bmp);
			}else{
				bmp = mBitmap.get();
			}
			
			mPaint.reset();
			mPaint.setXfermode(xfermode);
			drawCanvas.drawBitmap(bmp, 0, 0, mPaint);
			
			canvas.drawBitmap(bitmap, 0, 0, null);
		}
	}
	
	Bitmap getBitmap(){
		Bitmap bmp = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888);
		Canvas canvas = new Canvas(bmp);
		mPaint.reset();
		mPaint.setAntiAlias(true);
		mPaint.setColor(Color.BLACK);
		canvas.drawRoundRect(new RectF(0, 0, getWidth(), getHeight()), 10, 10, mPaint);
		return bmp;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值