IllustrationAndroid drawArc нерегулярной дуга
Я рисую несколько сегментов дуги, используя тот же RectF, однако дуги не выстраиваются надлежащим образом. Я пробовал все параметры CAP, но он никогда не выглядит симметричным.
private void initPaint(TypedArray a){
segmentInactivePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
segmentInactivePaint.setColor(a.getColor(R.styleable.SegmentsCustomView_segmentBgColor, segmentBgColor));
segmentInactivePaint.setStrokeWidth(30f);
segmentInactivePaint.setStyle(Paint.Style.STROKE);
segmentsBGPaint = new Paint(segmentInactivePaint);
segmentsBGPaint.setAlpha(64);
segmentActivePaint = new Paint(segmentInactivePaint);
segmentActivePaint.setColor(a.getColor(R.styleable.SegmentsCustomView_segmentActiveColor,segmentActiveColor));
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if(getWidth()<getHeight()) {
rectF.set(getLeft(), getTop(), getWidth() - getLeft(), getWidth() - getLeft());
}else{
rectF.set(getLeft(), getTop(), getHeight() - getTop(), getHeight() - getTop());
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
position = 0;
for(int i=0; i < segmentSizes.length; i++){
canvas.drawArc(rectF,position-180,segmentSizes[i]-segmentGap,false,
i != segmentActive ?
i < segmentActive ? segmentInactivePaint : segmentsBGPaint
: segmentActivePaint);
position+=segmentSizes[i];
}
}
Я также попытался с помощью статического RectF, который не изменяется при изменении размеров каких-либо событий, так что это не проблема.
RectF (0):﹕ [75.0,75.0][759.0,759.0]
RectF (1):﹕ [75.0,75.0][759.0,759.0]
RectF (2):﹕ [75.0,75.0][759.0,759.0]
RectF (3):﹕ [75.0,75.0][759.0,759.0]
RectF (4):﹕ [75.0,75.0][759.0,759.0]
Мое предположение было бы, что метод Canvas.drawArc создает частичный путь и, следовательно, интерполяция дуги всегда отличается от дуги полной окружности.
Толчок в правильном направлении был бы очень признателен.