1

私はImageViewをdrawable.circleに設定しています。円はストローク幅が太い。ストロークの幅をアニメーション化して、指定された期間にわたって1dpに設定されているものから縮小したいと思います。 drawableでこれを行うことができない場合は、そのパスにpaint.styleがStrokeに設定された円のcustomViewがあります。そのアニメーションをdrawable.circleまたはcustomViewに適用したいと思います。ビューのストローク幅をアニメーション化する方法

CustomCirleView:

public class CustomCircle extends View { 

private Path path; 
private Paint paint; 
float customStrokeWidth = 80; 


public float getCustomStrokeWidth() { 
    return customStrokeWidth; 
} 

public void setCustomStrokeWidth(float customStrokeWidth) { 
    this.customStrokeWidth = customStrokeWidth; 
} 


public CustomCircle(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    path = new Path(); 
    paint = new Paint(); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setAntiAlias(true); 
    paint.setColor(Color.parseColor("#FC6C2B")); 
    paint.setStrokeWidth(customStrokeWidth); 
    path.addCircle(getMeasuredWidth()/2, getMeasuredHeight()/2, (getMeasuredWidth()/2)-customStrokeWidth, Path.Direction.CW); 

    canvas.drawPath(path, paint); 
} 

}

おかげ

+0

アニメーションベクトルドロワブルあなたはストローク幅をアニメーション化することができ、可能な限り少ないとして行う必要がありますようとonDrawメソッド内のすべての塗料の初期化を行うことはありませんしてください。アニメーションをより精密に制御する必要がある場合は、カスタム図面を作成してアニメートすることができますが、カスタムビューよりもデカップリングされています。 – BladeCoder

答えて

0

私はこのような何かをして、ちょうどあなたのonDraw方法で円を描きます。それは常にある程度の時間がかかり、onDraw方法は

private void init() { 
    animator = ObjectAnimator.ofFloat(this, "animationProgress", startVal, endVal); 
    animator.setStartDelay(ANIMATION_START_DELAY); 
    animator.setDuration(ANIMATION_DURATION); 
    animator.setInterpolator(new FastOutSlowInInterpolator()); 

    path = new Path(); 
    paint = new Paint(); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setAntiAlias(true); 
    paint.setColor(Color.parseColor("#FC6C2B")); 
    paint.setStrokeWidth(customStrokeWidth); 
    path.addCircle(getMeasuredWidth()/2, getMeasuredHeight()/2, (getMeasuredWidth()/2)-customStrokeWidth, Path.Direction.CW); 
} 

/** 
* Is called by the {@link #animator} after an animation update 
*/ 
protected void setAnimationProgress(float strokeWidth) { 
    this.strokeWidth = strokeWidth; 
    postInvalidateOnAnimation(); 
} 
関連する問題