首页 > 学院 > 开发设计 > 正文

CustomImageView圆形imageView, 支持xutils加载

2019-11-09 14:58:16
字体:
来源:转载
供稿:网友
package com.beidaivf.aibaby.myview;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.RectF;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.widget.ImageView;import com.beidaivf.aibaby.R;/** * 图片圆角实现,支持xUtils *  * @author Himan *  */public class CustomImageView extends ImageView {   PRivate Paint paint;   private Paint paintBorder;   public CustomImageView(final Context context) {      this(context, null);   }   public CustomImageView(Context context, AttributeSet attrs) {      this(context, attrs, R.attr.customImageViewStyle);   }   public CustomImageView(Context context, AttributeSet attrs, int defStyle) {      super(context, attrs, defStyle);      this.setScaleType(ScaleType.FIT_XY);      TypedArray ta = context.obtainStyledAttributes(attrs,            R.styleable.CustomImageView, defStyle, 0);      mRadius = ta.getDimension(R.styleable.CustomImageView_radius, 0);      mIsCircle = ta.getBoolean(R.styleable.CustomImageView_circle, false);      ta.recycle();      paint = new Paint();      paint.setAntiAlias(true);      paintBorder = new Paint();      paintBorder.setAntiAlias(true);   }   public void addShadow() {      setLayerType(LAYER_TYPE_SOFTWARE, paintBorder);      paintBorder.setShadowLayer(4.0f, 0.0f, 2.0f, Color.BLACK);   }   private float mRadius;   private boolean mIsCircle;   @Override   public void onDraw(Canvas canvas) {      int width = canvas.getWidth() - getPaddingLeft() - getPaddingRight();      int height = canvas.getHeight() - getPaddingTop() - getPaddingBottom();      Bitmap image = drawableToBitmap(getDrawable());      Bitmap reSizeImage = reSizeImage(image, width, height);      if (mIsCircle) {         canvas.drawBitmap(createCircleImage(reSizeImage, width, height),               getPaddingLeft(), getPaddingTop(), null);      } else {         canvas.drawBitmap(createRoundImage(reSizeImage, width, height),               getPaddingLeft(), getPaddingTop(), null);      }   }   private Bitmap createRoundImage(Bitmap source, int width, int height) {      final Paint paint = new Paint();      paint.setAntiAlias(true);      Bitmap target = Bitmap.createBitmap(width, height, Config.ARGB_8888);      Canvas canvas = new Canvas(target);      RectF rect = new RectF(0, 0, width, height);      canvas.drawRoundRect(rect, mRadius, mRadius, paint);      paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));      canvas.drawBitmap(source, 0, 0, paint);      return target;   }   private Bitmap createCircleImage(Bitmap source, int width, int height) {      final Paint paint = new Paint();      paint.setAntiAlias(true);      Bitmap target = Bitmap.createBitmap(width, height, Config.ARGB_8888);      Canvas canvas = new Canvas(target);      canvas.drawCircle(width / 2, height / 2, Math.min(width, height) / 2,            paint);      paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));      canvas.drawBitmap(source, 0, 0, paint);      return target;   }   @Override   protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {      int width = MeasureSpec.getSize(widthMeasureSpec);      int height = MeasureSpec.getSize(heightMeasureSpec);      setMeasuredDimension(width, height);   }   /**    * drawablebitmap    *     * @param drawable    * @return    */   private Bitmap drawableToBitmap(Drawable drawable) {      if (drawable == null) {         return null;      } else if (drawable instanceof BitmapDrawable) {         return ((BitmapDrawable) drawable).getBitmap();      }      Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicHeight(),            drawable.getIntrinsicHeight(), Config.ARGB_8888);      Canvas canvas = new Canvas(bitmap);      drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());      drawable.draw(canvas);      return bitmap;   }   /**    * 重设Bitmap的宽高    *     * @param bitmap    * @param newWidth    * @param newHeight    * @return    */   private Bitmap reSizeImage(Bitmap bitmap, int newWidth, int newHeight) {      int width = bitmap.getWidth();      int height = bitmap.getHeight();      // 计算出缩放比      float scaleWidth = ((float) newWidth) / width;      float scaleHeight = ((float) newHeight) / height;      // 矩阵缩放bitmap      Matrix matrix = new Matrix();      matrix.postScale(scaleWidth, scaleHeight);      return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);   }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表