diff --git a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java index 2f27195..ef3a31c 100644 --- a/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java +++ b/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java @@ -39,6 +39,7 @@ import android.view.View; import android.view.ViewOutlineProvider; import android.widget.ImageView; + import androidx.annotation.ColorInt; import androidx.annotation.ColorRes; import androidx.annotation.DrawableRes; @@ -51,7 +52,7 @@ public class CircleImageView extends ImageView { private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP; private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888; - private static final int COLORDRAWABLE_DIMENSION = 2; + private static final int COLOR_DRAWABLE_DIMENSION = 2; private static final int DEFAULT_BORDER_WIDTH = 0; private static final int DEFAULT_BORDER_COLOR = Color.BLACK; @@ -100,14 +101,15 @@ public CircleImageView(Context context, AttributeSet attrs) { public CircleImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0); - - mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_civ_border_width, DEFAULT_BORDER_WIDTH); - mBorderColor = a.getColor(R.styleable.CircleImageView_civ_border_color, DEFAULT_BORDER_COLOR); - mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_civ_border_overlay, DEFAULT_BORDER_OVERLAY); - mCircleBackgroundColor = a.getColor(R.styleable.CircleImageView_civ_circle_background_color, DEFAULT_CIRCLE_BACKGROUND_COLOR); + TypedArray styledAttributes = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0); - a.recycle(); + if(styledAttributes!=null) { + mBorderWidth = styledAttributes.getDimensionPixelSize(R.styleable.CircleImageView_civ_border_width, DEFAULT_BORDER_WIDTH); + mBorderColor = styledAttributes.getColor(R.styleable.CircleImageView_civ_border_color, DEFAULT_BORDER_COLOR); + mBorderOverlay = styledAttributes.getBoolean(R.styleable.CircleImageView_civ_border_overlay, DEFAULT_BORDER_OVERLAY); + mCircleBackgroundColor = styledAttributes.getColor(R.styleable.CircleImageView_civ_circle_background_color, DEFAULT_CIRCLE_BACKGROUND_COLOR); + styledAttributes.recycle(); + } init(); } @@ -195,8 +197,8 @@ public void invalidateDrawable(@NonNull Drawable dr) { } @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - super.onSizeChanged(w, h, oldw, oldh); + protected void onSizeChanged(int w, int h, int oldWidth, int oldHeight) { + super.onSizeChanged(w, h, oldWidth, oldHeight); updateDimensions(); invalidate(); } @@ -383,23 +385,25 @@ private Bitmap getBitmapFromDrawable(Drawable drawable) { return ((BitmapDrawable) drawable).getBitmap(); } - try { - Bitmap bitmap; + Bitmap bitmap; - if (drawable instanceof ColorDrawable) { - bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG); - } else { - bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG); - } + if (drawable instanceof ColorDrawable) { + bitmap = Bitmap.createBitmap(COLOR_DRAWABLE_DIMENSION, COLOR_DRAWABLE_DIMENSION, BITMAP_CONFIG); + } else { + final int intrinsicWidth = drawable.getIntrinsicWidth(); + final int intrinsicHeight = drawable.getIntrinsicHeight(); - Canvas canvas = new Canvas(bitmap); - drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); - drawable.draw(canvas); - return bitmap; - } catch (Exception e) { - e.printStackTrace(); - return null; + if (intrinsicWidth <= 0 || intrinsicHeight <= 0) { + return null; + } + bitmap = Bitmap.createBitmap(intrinsicWidth, intrinsicHeight, BITMAP_CONFIG); } + + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + drawable.draw(canvas); + return bitmap; + } private void initializeBitmap() {