Created
February 12, 2019 09:29
-
-
Save flyfire/6009b4e823fe46498a465b6dc1ccb656 to your computer and use it in GitHub Desktop.
[CircleImageView] 圆角图片 #抗锯齿 #Xfermode
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.open.circleimageview.widget; | |
| import android.content.Context; | |
| import android.graphics.Bitmap; | |
| import android.graphics.Canvas; | |
| import android.graphics.Color; | |
| import android.graphics.Paint; | |
| import android.graphics.PaintFlagsDrawFilter; | |
| import android.graphics.PorterDuff; | |
| import android.graphics.PorterDuffXfermode; | |
| import android.graphics.Rect; | |
| import android.graphics.RectF; | |
| import android.util.AttributeSet; | |
| import android.view.View; | |
| public class CircleImageViewB extends View { | |
| public CircleImageViewB(Context context, AttributeSet attrs, int defStyle) { | |
| super(context, attrs, defStyle); | |
| init(); | |
| } | |
| public CircleImageViewB(Context context, AttributeSet attrs) { | |
| super(context, attrs); | |
| init(); | |
| } | |
| public CircleImageViewB(Context context) { | |
| super(context); | |
| init(); | |
| } | |
| private Bitmap bitmap; | |
| private Rect bitmapRect=new Rect(); | |
| private PaintFlagsDrawFilter pdf=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG); | |
| private Paint paint = new Paint(); | |
| { | |
| paint.setStyle(Paint.Style.STROKE); | |
| paint.setFlags(Paint.ANTI_ALIAS_FLAG); | |
| paint.setAntiAlias(true);// 设置画笔的锯齿效果。 true是去除,大家一看效果就明白了 | |
| } | |
| private Bitmap mDstB=null; | |
| private PorterDuffXfermode xfermode=new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY); | |
| private void init() | |
| { | |
| try { | |
| if(android.os.Build.VERSION.SDK_INT>=11) | |
| { | |
| setLayerType(LAYER_TYPE_SOFTWARE, null); | |
| } | |
| } catch (Exception e) { | |
| e.printStackTrace(); | |
| } | |
| } | |
| public void setImageBitmap(Bitmap bitmap) | |
| { | |
| this.bitmap=bitmap; | |
| } | |
| private Bitmap makeDst(int w, int h) | |
| { | |
| Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); | |
| Canvas c = new Canvas(bm); | |
| Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); | |
| p.setColor(Color.parseColor("#ffffffff")); | |
| c.drawOval(new RectF(0, 0, w, h), p); | |
| return bm; | |
| } | |
| @Override | |
| protected void onDraw(Canvas canvas) { | |
| if(null==bitmap) | |
| { | |
| return; | |
| } | |
| if(null==mDstB) | |
| { | |
| mDstB=makeDst(getWidth(), getHeight()); | |
| } | |
| bitmapRect.set(0, 0, getWidth(), getHeight()); | |
| canvas.save(); | |
| canvas.setDrawFilter(pdf); | |
| canvas.drawBitmap(mDstB, 0, 0, paint); | |
| paint.setXfermode(xfermode); | |
| canvas.drawBitmap(bitmap, null, bitmapRect, paint); | |
| paint.setXfermode(null); | |
| canvas.restore(); | |
| } | |
| } | |
| --------------------- | |
| 原文:https://blog.csdn.net/ZZ7ZZ7ZZ/article/details/11495517 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment