国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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);   }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜城市| 阿巴嘎旗| 华坪县| 云林县| 潍坊市| 长寿区| 华宁县| 讷河市| 姚安县| 宁明县| 萝北县| 定南县| 衡东县| 荥经县| 翁源县| 威海市| 含山县| 通州市| 竹北市| 彝良县| 绥化市| 班戈县| 武乡县| 澄迈县| 东城区| 枣庄市| 西昌市| 泰安市| 资源县| 桂林市| 莱州市| 浙江省| 肥西县| 洛南县| 琼海市| 南郑县| 岐山县| 襄樊市| 将乐县| 永新县| 绥宁县|