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" />


上一篇:
下一篇:
切换中文