import android.graphics.RectF; //导入方法依赖的package包/类
@Override
protected void drawGraph(ArrayList pointList, ArrayList rawPointList, RectF rectCanvas, RectF rectGraph,
int start, int end, EasyPoint pOriginal, EasyPoint pMin, EasyPoint pMax, float axisWidth,
float factorX, float factorY, float animatorValue, Canvas canvas) {
if (rectCanvas.intersect(rectGraph)) {
halfFactorWidth = width * factorX / 2;
EasyPoint p;
EasyPoint pR;
RectF r = new RectF();
String text;
EasyPoint startP = rawPointList.get(start);
path.reset();
path.moveTo(startP.x, startP.y);
// 绘制矩形
for (int i = start; i <= end; i++) {
p = pointList.get(i);
pR = rawPointList.get(i);
r.set(pR.x - halfFactorWidth / 2,
p.y > 0 ? pOriginal.y + (pR.y - pOriginal.y) * animatorValue : pOriginal.y + axisWidth / 2 + borderWidth / 2,
pR.x + halfFactorWidth / 2,
p.y > 0 ? pOriginal.y - axisWidth / 2 - borderWidth / 2 : pOriginal.y + (pR.y - pOriginal.y) * animatorValue);
if (i != selectedIndex) {
canvas.drawRect(r, rectPaint);
canvas.drawRect(r, borderPaint);
} else {
rectPaint.setColor(rectSelectedColor);
borderPaint.setColor(borderSelectedColor);
canvas.drawRect(r, rectPaint);
canvas.drawRect(r, borderPaint);
rectPaint.setColor(rectColor);
borderPaint.setColor(borderColor);
}
path.lineTo(pR.x, pR.y);
}
// 绘制线条
pathDst.reset();
pathDst.rLineTo(0, 0);
pm.setPath(path, false);
pm.getSegment(0.0f, pm.getLength() * animatorValue, pathDst, true);
canvas.drawPath(pathDst, linePaint);
// 绘制文字
if (animatorValue >= 0.8f) {
int alpha = 0;
for (int i = start; i <= end; i++) {
p = pointList.get(i);
pR = rawPointList.get(i);
text = String.valueOf(p.y);
float textHeight = fm.bottom - fm.top;
float textWidth = textPaint.measureText(text);
float mid = p.y > 0 ?
pR.y - textHeight / 2 :
pR.y + textHeight / 2;
float baseLine = mid - (fm.ascent + fm.descent) / 2;
if (i != selectedIndex) {
textPaint.setAlpha((int) (1275 * animatorValue - 1020)); // animatorValue:0.8->1 alpha:0->255
canvas.drawText(text, pR.x - textWidth / 2, baseLine, textPaint);
} else {
textPaint.setColor(textSelectedColor);
textPaint.setAlpha((int) (1275 * animatorValue - 1020)); // animatorValue:0.8->1 alpha:0->255
canvas.drawText(text, pR.x - textWidth / 2, baseLine, textPaint);
textPaint.setColor(textColor);
}
}
}
}
}