圆形头像

来源:互联网 发布:全国房地产销售数据 编辑:程序博客网 时间:2024/04/28 18:57

Android源生提供的Image都是方块的,就算你的背景图是个圆形默认还是在一个透明方图之上.所以要圆形必须自定义

下面是在某大侠博客看到的,因为时间过太久才来整理忘了他博客的链接!抱歉了!!!委屈

1:

public abstract class MaskedImage extends ImageView{private static final Xfermode MASK_XFERMODE;      private Bitmap mask;      private Paint paint;        static {          PorterDuff.Mode localMode = PorterDuff.Mode.DST_IN;          MASK_XFERMODE = new PorterDuffXfermode(localMode);      }        public MaskedImage(Context paramContext) {          super(paramContext);      }        public MaskedImage(Context paramContext, AttributeSet paramAttributeSet) {          super(paramContext, paramAttributeSet);      }        public MaskedImage(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {          super(paramContext, paramAttributeSet, paramInt);      }        public abstract Bitmap createMask();        protected void onDraw(Canvas paramCanvas) {          Drawable localDrawable = getDrawable();          if (localDrawable == null)              return;          try {              if (this.paint == null) {                  Paint localPaint1 = new Paint();                  this.paint = localPaint1;                  this.paint.setFilterBitmap(false);                  Paint localPaint2 = this.paint;                  Xfermode localXfermode1 = MASK_XFERMODE;                  @SuppressWarnings("unused")                  Xfermode localXfermode2 = localPaint2.setXfermode(localXfermode1);              }              float f1 = getWidth();              float f2 = getHeight();              int i = paramCanvas.saveLayer(0.0F, 0.0F, f1, f2, null, 31);              int j = getWidth();              int k = getHeight();              localDrawable.setBounds(0, 0, j, k);              localDrawable.draw(paramCanvas);              if ((this.mask == null) || (this.mask.isRecycled())) {                  Bitmap localBitmap1 = createMask();                  this.mask = localBitmap1;              }              Bitmap localBitmap2 = this.mask;              Paint localPaint3 = this.paint;              paramCanvas.drawBitmap(localBitmap2, 0.0F, 0.0F, localPaint3);              paramCanvas.restoreToCount(i);              return;          } catch (Exception localException) {              StringBuilder localStringBuilder = new StringBuilder()                      .append("Attempting to draw with recycled bitmap. View ID = ");              System.out.println("localStringBuilder=="+localStringBuilder);          }      } }


2:

public class CircularImage extends MaskedImage {public CircularImage(Context paramContext) {          super(paramContext);      }        public CircularImage(Context paramContext, AttributeSet paramAttributeSet) {          super(paramContext, paramAttributeSet);      }        public CircularImage(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {          super(paramContext, paramAttributeSet, paramInt);      }        public Bitmap createMask() {          int i = getWidth();          int j = getHeight();          Bitmap.Config localConfig = Bitmap.Config.ARGB_8888;          Bitmap localBitmap = Bitmap.createBitmap(i, j, localConfig);          Canvas localCanvas = new Canvas(localBitmap);          Paint localPaint = new Paint(1);          localPaint.setColor(-16777216);          float f1 = getWidth();          float f2 = getHeight();          RectF localRectF = new RectF(0.0F, 0.0F, f1, f2);          localCanvas.drawOval(localRectF, localPaint);          return localBitmap;      }  }


3:直接在布局文件就可以使用了

0 0
原创粉丝点击