LinePlot.java 文件源码

java
阅读 22 收藏 0 点赞 0 评论 0

项目:SevenDaysRateChart 作者:
@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);
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号