Search in sources :

Example 1 with RadarEntry

use of com.github.mikephil.charting.data.RadarEntry in project MPAndroidChart by PhilJay.

the class RadarChartRenderer method drawHighlighted.

@Override
public void drawHighlighted(Canvas c, Highlight[] indices) {
    float sliceangle = mChart.getSliceAngle();
    // calculate the factor that is needed for transforming the value to
    // pixels
    float factor = mChart.getFactor();
    MPPointF center = mChart.getCenterOffsets();
    MPPointF pOut = MPPointF.getInstance(0, 0);
    RadarData radarData = mChart.getData();
    for (Highlight high : indices) {
        IRadarDataSet set = radarData.getDataSetByIndex(high.getDataSetIndex());
        if (set == null || !set.isHighlightEnabled())
            continue;
        RadarEntry e = set.getEntryForIndex((int) high.getX());
        if (!isInBoundsX(e, set))
            continue;
        float y = (e.getY() - mChart.getYChartMin());
        Utils.getPosition(center, y * factor * mAnimator.getPhaseY(), sliceangle * high.getX() * mAnimator.getPhaseX() + mChart.getRotationAngle(), pOut);
        high.setDraw(pOut.x, pOut.y);
        // draw the lines
        drawHighlightLines(c, pOut.x, pOut.y, set);
        if (set.isDrawHighlightCircleEnabled()) {
            if (!Float.isNaN(pOut.x) && !Float.isNaN(pOut.y)) {
                int strokeColor = set.getHighlightCircleStrokeColor();
                if (strokeColor == ColorTemplate.COLOR_NONE) {
                    strokeColor = set.getColor(0);
                }
                if (set.getHighlightCircleStrokeAlpha() < 255) {
                    strokeColor = ColorTemplate.colorWithAlpha(strokeColor, set.getHighlightCircleStrokeAlpha());
                }
                drawHighlightCircle(c, pOut, set.getHighlightCircleInnerRadius(), set.getHighlightCircleOuterRadius(), set.getHighlightCircleFillColor(), strokeColor, set.getHighlightCircleStrokeWidth());
            }
        }
    }
    MPPointF.recycleInstance(center);
    MPPointF.recycleInstance(pOut);
}
Also used : RadarEntry(com.github.mikephil.charting.data.RadarEntry) Highlight(com.github.mikephil.charting.highlight.Highlight) IRadarDataSet(com.github.mikephil.charting.interfaces.datasets.IRadarDataSet) MPPointF(com.github.mikephil.charting.utils.MPPointF) RadarData(com.github.mikephil.charting.data.RadarData) Paint(android.graphics.Paint)

Example 2 with RadarEntry

use of com.github.mikephil.charting.data.RadarEntry in project MPAndroidChart by PhilJay.

the class RadarChartActivitry method setData.

public void setData() {
    float mult = 80;
    float min = 20;
    int cnt = 5;
    ArrayList<RadarEntry> entries1 = new ArrayList<RadarEntry>();
    ArrayList<RadarEntry> entries2 = new ArrayList<RadarEntry>();
    // the chart.
    for (int i = 0; i < cnt; i++) {
        float val1 = (float) (Math.random() * mult) + min;
        entries1.add(new RadarEntry(val1));
        float val2 = (float) (Math.random() * mult) + min;
        entries2.add(new RadarEntry(val2));
    }
    RadarDataSet set1 = new RadarDataSet(entries1, "Last Week");
    set1.setColor(Color.rgb(103, 110, 129));
    set1.setFillColor(Color.rgb(103, 110, 129));
    set1.setDrawFilled(true);
    set1.setFillAlpha(180);
    set1.setLineWidth(2f);
    set1.setDrawHighlightCircleEnabled(true);
    set1.setDrawHighlightIndicators(false);
    RadarDataSet set2 = new RadarDataSet(entries2, "This Week");
    set2.setColor(Color.rgb(121, 162, 175));
    set2.setFillColor(Color.rgb(121, 162, 175));
    set2.setDrawFilled(true);
    set2.setFillAlpha(180);
    set2.setLineWidth(2f);
    set2.setDrawHighlightCircleEnabled(true);
    set2.setDrawHighlightIndicators(false);
    ArrayList<IRadarDataSet> sets = new ArrayList<IRadarDataSet>();
    sets.add(set1);
    sets.add(set2);
    RadarData data = new RadarData(sets);
    data.setValueTypeface(mTfLight);
    data.setValueTextSize(8f);
    data.setDrawValues(false);
    data.setValueTextColor(Color.WHITE);
    mChart.setData(data);
    mChart.invalidate();
}
Also used : RadarEntry(com.github.mikephil.charting.data.RadarEntry) RadarDataSet(com.github.mikephil.charting.data.RadarDataSet) IRadarDataSet(com.github.mikephil.charting.interfaces.datasets.IRadarDataSet) IRadarDataSet(com.github.mikephil.charting.interfaces.datasets.IRadarDataSet) ArrayList(java.util.ArrayList) RadarData(com.github.mikephil.charting.data.RadarData)

Example 3 with RadarEntry

use of com.github.mikephil.charting.data.RadarEntry in project MPAndroidChart by PhilJay.

the class RadarChartRenderer method drawDataSet.

/**
     * Draws the RadarDataSet
     *
     * @param c
     * @param dataSet
     * @param mostEntries the entry count of the dataset with the most entries
     */
protected void drawDataSet(Canvas c, IRadarDataSet dataSet, int mostEntries) {
    float phaseX = mAnimator.getPhaseX();
    float phaseY = mAnimator.getPhaseY();
    float sliceangle = mChart.getSliceAngle();
    // calculate the factor that is needed for transforming the value to
    // pixels
    float factor = mChart.getFactor();
    MPPointF center = mChart.getCenterOffsets();
    MPPointF pOut = MPPointF.getInstance(0, 0);
    Path surface = mDrawDataSetSurfacePathBuffer;
    surface.reset();
    boolean hasMovedToPoint = false;
    for (int j = 0; j < dataSet.getEntryCount(); j++) {
        mRenderPaint.setColor(dataSet.getColor(j));
        RadarEntry e = dataSet.getEntryForIndex(j);
        Utils.getPosition(center, (e.getY() - mChart.getYChartMin()) * factor * phaseY, sliceangle * j * phaseX + mChart.getRotationAngle(), pOut);
        if (Float.isNaN(pOut.x))
            continue;
        if (!hasMovedToPoint) {
            surface.moveTo(pOut.x, pOut.y);
            hasMovedToPoint = true;
        } else
            surface.lineTo(pOut.x, pOut.y);
    }
    if (dataSet.getEntryCount() > mostEntries) {
        // if this is not the largest set, draw a line to the center before closing
        surface.lineTo(center.x, center.y);
    }
    surface.close();
    if (dataSet.isDrawFilledEnabled()) {
        final Drawable drawable = dataSet.getFillDrawable();
        if (drawable != null) {
            drawFilledPath(c, surface, drawable);
        } else {
            drawFilledPath(c, surface, dataSet.getFillColor(), dataSet.getFillAlpha());
        }
    }
    mRenderPaint.setStrokeWidth(dataSet.getLineWidth());
    mRenderPaint.setStyle(Paint.Style.STROKE);
    // draw the line (only if filled is disabled or alpha is below 255)
    if (!dataSet.isDrawFilledEnabled() || dataSet.getFillAlpha() < 255)
        c.drawPath(surface, mRenderPaint);
    MPPointF.recycleInstance(center);
    MPPointF.recycleInstance(pOut);
}
Also used : Path(android.graphics.Path) RadarEntry(com.github.mikephil.charting.data.RadarEntry) MPPointF(com.github.mikephil.charting.utils.MPPointF) Drawable(android.graphics.drawable.Drawable) Paint(android.graphics.Paint)

Example 4 with RadarEntry

use of com.github.mikephil.charting.data.RadarEntry in project MPAndroidChart by PhilJay.

the class RadarChartRenderer method drawValues.

@Override
public void drawValues(Canvas c) {
    float phaseX = mAnimator.getPhaseX();
    float phaseY = mAnimator.getPhaseY();
    float sliceangle = mChart.getSliceAngle();
    // calculate the factor that is needed for transforming the value to
    // pixels
    float factor = mChart.getFactor();
    MPPointF center = mChart.getCenterOffsets();
    MPPointF pOut = MPPointF.getInstance(0, 0);
    MPPointF pIcon = MPPointF.getInstance(0, 0);
    float yoffset = Utils.convertDpToPixel(5f);
    for (int i = 0; i < mChart.getData().getDataSetCount(); i++) {
        IRadarDataSet dataSet = mChart.getData().getDataSetByIndex(i);
        if (!shouldDrawValues(dataSet))
            continue;
        // apply the text-styling defined by the DataSet
        applyValueTextStyle(dataSet);
        MPPointF iconsOffset = MPPointF.getInstance(dataSet.getIconsOffset());
        iconsOffset.x = Utils.convertDpToPixel(iconsOffset.x);
        iconsOffset.y = Utils.convertDpToPixel(iconsOffset.y);
        for (int j = 0; j < dataSet.getEntryCount(); j++) {
            RadarEntry entry = dataSet.getEntryForIndex(j);
            Utils.getPosition(center, (entry.getY() - mChart.getYChartMin()) * factor * phaseY, sliceangle * j * phaseX + mChart.getRotationAngle(), pOut);
            if (dataSet.isDrawValuesEnabled()) {
                drawValue(c, dataSet.getValueFormatter(), entry.getY(), entry, i, pOut.x, pOut.y - yoffset, dataSet.getValueTextColor(j));
            }
            if (entry.getIcon() != null && dataSet.isDrawIconsEnabled()) {
                Drawable icon = entry.getIcon();
                Utils.getPosition(center, (entry.getY()) * factor * phaseY + iconsOffset.y, sliceangle * j * phaseX + mChart.getRotationAngle(), pIcon);
                //noinspection SuspiciousNameCombination
                pIcon.y += iconsOffset.x;
                Utils.drawImage(c, icon, (int) pIcon.x, (int) pIcon.y, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());
            }
        }
        MPPointF.recycleInstance(iconsOffset);
    }
    MPPointF.recycleInstance(center);
    MPPointF.recycleInstance(pOut);
    MPPointF.recycleInstance(pIcon);
}
Also used : RadarEntry(com.github.mikephil.charting.data.RadarEntry) IRadarDataSet(com.github.mikephil.charting.interfaces.datasets.IRadarDataSet) MPPointF(com.github.mikephil.charting.utils.MPPointF) Drawable(android.graphics.drawable.Drawable) Paint(android.graphics.Paint)

Aggregations

RadarEntry (com.github.mikephil.charting.data.RadarEntry)4 Paint (android.graphics.Paint)3 IRadarDataSet (com.github.mikephil.charting.interfaces.datasets.IRadarDataSet)3 MPPointF (com.github.mikephil.charting.utils.MPPointF)3 Drawable (android.graphics.drawable.Drawable)2 RadarData (com.github.mikephil.charting.data.RadarData)2 Path (android.graphics.Path)1 RadarDataSet (com.github.mikephil.charting.data.RadarDataSet)1 Highlight (com.github.mikephil.charting.highlight.Highlight)1 ArrayList (java.util.ArrayList)1