@Override
public void draw(Canvas canvas) {
//must be located here
mPaint.setColor(mContext.getResources().getColor(android.R.color.holo_orange_light));
mPaint.setStyle(Style.STROKE);
mPaint.setStrokeWidth(RateChartConst.sLineWidth);
mPaint.setAntiAlias(true);
RateChartManager manager = mManager;
int columns = manager.getColumnNum();
double[] YValues = manager.getYValues();
if (YValues == null || YValues.length < columns) return;
double[] yValues = new double[YValues.length];
System.arraycopy(YValues, 0, yValues, 0, yValues.length);
double[] yCoordinates = manager.getYCoordinates();
double deltaYCoordinateMM = RateDataHelper.getAbsDeltaMaxMin(yCoordinates);
double maxYCoordinate = RateDataHelper.getMax(yCoordinates);
//draw y coordinate value.
float[] drawYValue = new float[YValues.length];
for (int m = 0; m < yValues.length; m++) {
drawYValue[m] =
(float) (mRegionHeight * (maxYCoordinate - yValues[m]) / deltaYCoordinateMM);
}
// line path
mLinePath.reset();
mLinePath.moveTo(mMarginLeft, mMarginTop + drawYValue[0]);
mShaderPath.reset();
mShaderPath.moveTo(mMarginLeft, mMarginTop + drawYValue[0]);
float deltaX = mRegionWidth / (columns - 1);
if (columns < RateChartConst.sColumnNum) {
deltaX = mRegionWidth / (RateChartConst.sColumnNum - 1);
}
for (int i = 1; i < columns; i++) {
mLinePath.lineTo(mMarginLeft + deltaX * i, drawYValue[i] + mMarginTop);
mShaderPath.lineTo(mMarginLeft + deltaX * i, drawYValue[i] + mMarginTop);
}
//draw shader
mShaderPath.lineTo(mMarginLeft + deltaX * (columns - 1), mRegionHeight + mMarginTop);
mShaderPath.lineTo(mMarginLeft, mRegionHeight + mMarginTop);
mShaderPath.lineTo(mMarginLeft, mMarginTop + drawYValue[0]);
mShaderPath.setFillType(FillType.EVEN_ODD);
canvas.drawPath(mShaderPath, mShaderPaint);
//draw line
canvas.drawPath(mLinePath, mPaint);
//draw orange circle
mPaint.setStrokeWidth(RateChartConst.sCircleWidth);
canvas.drawCircle(mMarginLeft + deltaX * (columns - 1),
drawYValue[columns - 1] + mMarginTop, RateChartConst.sCircleOuterRadius, mPaint);
//draw inner circle.
mPaint.setColor(mContext.getResources().getColor(android.R.color.white));
mPaint.setStyle(Style.FILL);
canvas.drawCircle(mMarginLeft + deltaX * (columns - 1),
drawYValue[columns - 1] + mMarginTop, RateChartConst.sCircleInnerRadius, mPaint);
//draw black pop window.
float mLatestX = mMarginLeft + deltaX * (columns - 1);
float mLatestY = mMarginTop + drawYValue[columns - 1];
showPopText(canvas,
mDecimalFormat.format(manager.getYValues()[manager.getYValues().length - 1]),
mLatestX, mLatestY);
}
LinePlot.java 文件源码
java
阅读 22
收藏 0
点赞 0
评论 0
项目:SevenDaysRateChart
作者:
评论列表
文章目录