private int borderColor;
private float borderWidth;
public void setBorderColor(int borderColor) {
this.borderColor = borderColor;
invalidate();
}
public void setBorderWidth(float borderWidth) {
this.borderWidth = borderWidth;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint borderPaint = new Paint();
borderPaint.setStyle(Paint.Style.STROKE);
borderPaint.setColor(borderColor);
borderPaint.setStrokeWidth(borderWidth);
int radius = getWidth() / 2;
canvas.drawCircle(radius, radius, radius - borderWidth / 2, borderPaint);
}
private int animDuration;
public void setAnimDuration(int animDuration) {
this.animDuration = animDuration;
}
@Override
protected void onDraw(Canvas canvas) {
// ...
if (animDuration > 0 && borderPaint != null) {
ValueAnimator anim = ValueAnimator.ofFloat(borderWidth, strokeWidth);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
borderWidth = (float) valueAnimator.getAnimatedValue();
invalidate();
}
});
anim.setDuration(animDuration);
anim.start();
}
}
public class CustomCircleImageView extends CircleImageView {
private int borderColor;
private float borderWidth;
private Paint borderPaint;
private int animDuration;
public CustomCircleImageView(Context context) {
super(context);
init();
}
public CustomCircleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CustomCircleImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
borderPaint = new Paint();
borderPaint.setStyle(Paint.Style.STROKE);
}
public void setBorderColor(int borderColor) {
this.borderColor = borderColor;
invalidate();
}
public void setBorderWidth(float borderWidth) {
this.borderWidth = borderWidth;
invalidate();
}
public void setAnimDuration(int animDuration) {
this.animDuration = animDuration;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int radius = getWidth() / 2;
borderPaint.setColor(borderColor);
borderPaint.setStrokeWidth(borderWidth);
canvas.drawCircle(radius, radius, radius - borderWidth / 2, borderPaint);
if (animDuration > 0 && borderPaint != null) {
ValueAnimator anim = ValueAnimator.ofFloat(borderWidth, 0f);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
borderWidth = (float) valueAnimator.getAnimatedValue();
invalidate();
}
});
anim.setDuration(animDuration);
anim.start();
}
}
}
<com.example.myapp.CustomCircleImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/circleImageView"
android:layout_width="100dp"
android:layout_height="100dp"
app:civ_borderColor="#FF0000"
app:civ_borderWidth="2dp"
app:civ_animDuration="1000" />