Search in sources :

Example 1 with LimitLine

use of com.github.mikephil.charting.components.LimitLine in project MPAndroidChart by PhilJay.

the class LineChartActivity1 method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_linechart);
    tvX = (TextView) findViewById(R.id.tvXMax);
    tvY = (TextView) findViewById(R.id.tvYMax);
    mSeekBarX = (SeekBar) findViewById(R.id.seekBar1);
    mSeekBarY = (SeekBar) findViewById(R.id.seekBar2);
    mSeekBarX.setProgress(45);
    mSeekBarY.setProgress(100);
    mSeekBarY.setOnSeekBarChangeListener(this);
    mSeekBarX.setOnSeekBarChangeListener(this);
    mChart = (LineChart) findViewById(R.id.chart1);
    mChart.setOnChartGestureListener(this);
    mChart.setOnChartValueSelectedListener(this);
    mChart.setDrawGridBackground(false);
    // no description text
    mChart.getDescription().setEnabled(false);
    // enable touch gestures
    mChart.setTouchEnabled(true);
    // enable scaling and dragging
    mChart.setDragEnabled(true);
    mChart.setScaleEnabled(true);
    // mChart.setScaleXEnabled(true);
    // mChart.setScaleYEnabled(true);
    // if disabled, scaling can be done on x- and y-axis separately
    mChart.setPinchZoom(true);
    // set an alternative background color
    // mChart.setBackgroundColor(Color.GRAY);
    // create a custom MarkerView (extend MarkerView) and specify the layout
    // to use for it
    MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
    // For bounds control
    mv.setChartView(mChart);
    // Set the marker to the chart
    mChart.setMarker(mv);
    // x-axis limit line
    LimitLine llXAxis = new LimitLine(10f, "Index 10");
    llXAxis.setLineWidth(4f);
    llXAxis.enableDashedLine(10f, 10f, 0f);
    llXAxis.setLabelPosition(LimitLabelPosition.RIGHT_BOTTOM);
    llXAxis.setTextSize(10f);
    XAxis xAxis = mChart.getXAxis();
    xAxis.enableGridDashedLine(10f, 10f, 0f);
    //xAxis.setValueFormatter(new MyCustomXAxisValueFormatter());
    //xAxis.addLimitLine(llXAxis); // add x-axis limit line
    Typeface tf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
    LimitLine ll1 = new LimitLine(150f, "Upper Limit");
    ll1.setLineWidth(4f);
    ll1.enableDashedLine(10f, 10f, 0f);
    ll1.setLabelPosition(LimitLabelPosition.RIGHT_TOP);
    ll1.setTextSize(10f);
    ll1.setTypeface(tf);
    LimitLine ll2 = new LimitLine(-30f, "Lower Limit");
    ll2.setLineWidth(4f);
    ll2.enableDashedLine(10f, 10f, 0f);
    ll2.setLabelPosition(LimitLabelPosition.RIGHT_BOTTOM);
    ll2.setTextSize(10f);
    ll2.setTypeface(tf);
    YAxis leftAxis = mChart.getAxisLeft();
    // reset all limit lines to avoid overlapping lines
    leftAxis.removeAllLimitLines();
    leftAxis.addLimitLine(ll1);
    leftAxis.addLimitLine(ll2);
    leftAxis.setAxisMaximum(200f);
    leftAxis.setAxisMinimum(-50f);
    //leftAxis.setYOffset(20f);
    leftAxis.enableGridDashedLine(10f, 10f, 0f);
    leftAxis.setDrawZeroLine(false);
    // limit lines are drawn behind data (and not on top)
    leftAxis.setDrawLimitLinesBehindData(true);
    mChart.getAxisRight().setEnabled(false);
    //mChart.getViewPortHandler().setMaximumScaleY(2f);
    //mChart.getViewPortHandler().setMaximumScaleX(2f);
    // add data
    setData(45, 100);
    //        mChart.setVisibleXRange(20);
    //        mChart.setVisibleYRange(20f, AxisDependency.LEFT);
    //        mChart.centerViewTo(20, 50, AxisDependency.LEFT);
    mChart.animateX(2500);
    //mChart.invalidate();
    // get the legend (only possible after setting data)
    Legend l = mChart.getLegend();
    // modify the legend ...
    l.setForm(LegendForm.LINE);
// // dont forget to refresh the drawing
// mChart.invalidate();
}
Also used : Legend(com.github.mikephil.charting.components.Legend) Typeface(android.graphics.Typeface) LimitLine(com.github.mikephil.charting.components.LimitLine) MyMarkerView(com.xxmassdeveloper.mpchartexample.custom.MyMarkerView) XAxis(com.github.mikephil.charting.components.XAxis) YAxis(com.github.mikephil.charting.components.YAxis)

Example 2 with LimitLine

use of com.github.mikephil.charting.components.LimitLine in project MPAndroidChart by PhilJay.

the class XAxisRenderer method renderLimitLines.

/**
     * Draws the LimitLines associated with this axis to the screen.
     *
     * @param c
     */
@Override
public void renderLimitLines(Canvas c) {
    List<LimitLine> limitLines = mXAxis.getLimitLines();
    if (limitLines == null || limitLines.size() <= 0)
        return;
    float[] position = mRenderLimitLinesBuffer;
    position[0] = 0;
    position[1] = 0;
    for (int i = 0; i < limitLines.size(); i++) {
        LimitLine l = limitLines.get(i);
        if (!l.isEnabled())
            continue;
        int clipRestoreCount = c.save();
        mLimitLineClippingRect.set(mViewPortHandler.getContentRect());
        mLimitLineClippingRect.inset(-l.getLineWidth(), 0.f);
        c.clipRect(mLimitLineClippingRect);
        position[0] = l.getLimit();
        position[1] = 0.f;
        mTrans.pointValuesToPixel(position);
        renderLimitLineLine(c, l, position);
        renderLimitLineLabel(c, l, position, 2.f + l.getYOffset());
        c.restoreToCount(clipRestoreCount);
    }
}
Also used : LimitLine(com.github.mikephil.charting.components.LimitLine) Paint(android.graphics.Paint)

Example 3 with LimitLine

use of com.github.mikephil.charting.components.LimitLine in project MPAndroidChart by PhilJay.

the class YAxisRenderer method renderLimitLines.

/**
     * Draws the LimitLines associated with this axis to the screen.
     *
     * @param c
     */
@Override
public void renderLimitLines(Canvas c) {
    List<LimitLine> limitLines = mYAxis.getLimitLines();
    if (limitLines == null || limitLines.size() <= 0)
        return;
    float[] pts = mRenderLimitLinesBuffer;
    pts[0] = 0;
    pts[1] = 0;
    Path limitLinePath = mRenderLimitLines;
    limitLinePath.reset();
    for (int i = 0; i < limitLines.size(); i++) {
        LimitLine l = limitLines.get(i);
        if (!l.isEnabled())
            continue;
        int clipRestoreCount = c.save();
        mLimitLineClippingRect.set(mViewPortHandler.getContentRect());
        mLimitLineClippingRect.inset(0.f, -l.getLineWidth());
        c.clipRect(mLimitLineClippingRect);
        mLimitLinePaint.setStyle(Paint.Style.STROKE);
        mLimitLinePaint.setColor(l.getLineColor());
        mLimitLinePaint.setStrokeWidth(l.getLineWidth());
        mLimitLinePaint.setPathEffect(l.getDashPathEffect());
        pts[1] = l.getLimit();
        mTrans.pointValuesToPixel(pts);
        limitLinePath.moveTo(mViewPortHandler.contentLeft(), pts[1]);
        limitLinePath.lineTo(mViewPortHandler.contentRight(), pts[1]);
        c.drawPath(limitLinePath, mLimitLinePaint);
        limitLinePath.reset();
        // c.drawLines(pts, mLimitLinePaint);
        String label = l.getLabel();
        // if drawing the limit-value label is enabled
        if (label != null && !label.equals("")) {
            mLimitLinePaint.setStyle(l.getTextStyle());
            mLimitLinePaint.setPathEffect(null);
            mLimitLinePaint.setColor(l.getTextColor());
            mLimitLinePaint.setTypeface(l.getTypeface());
            mLimitLinePaint.setStrokeWidth(0.5f);
            mLimitLinePaint.setTextSize(l.getTextSize());
            final float labelLineHeight = Utils.calcTextHeight(mLimitLinePaint, label);
            float xOffset = Utils.convertDpToPixel(4f) + l.getXOffset();
            float yOffset = l.getLineWidth() + labelLineHeight + l.getYOffset();
            final LimitLine.LimitLabelPosition position = l.getLabelPosition();
            if (position == LimitLine.LimitLabelPosition.RIGHT_TOP) {
                mLimitLinePaint.setTextAlign(Align.RIGHT);
                c.drawText(label, mViewPortHandler.contentRight() - xOffset, pts[1] - yOffset + labelLineHeight, mLimitLinePaint);
            } else if (position == LimitLine.LimitLabelPosition.RIGHT_BOTTOM) {
                mLimitLinePaint.setTextAlign(Align.RIGHT);
                c.drawText(label, mViewPortHandler.contentRight() - xOffset, pts[1] + yOffset, mLimitLinePaint);
            } else if (position == LimitLine.LimitLabelPosition.LEFT_TOP) {
                mLimitLinePaint.setTextAlign(Align.LEFT);
                c.drawText(label, mViewPortHandler.contentLeft() + xOffset, pts[1] - yOffset + labelLineHeight, mLimitLinePaint);
            } else {
                mLimitLinePaint.setTextAlign(Align.LEFT);
                c.drawText(label, mViewPortHandler.offsetLeft() + xOffset, pts[1] + yOffset, mLimitLinePaint);
            }
        }
        c.restoreToCount(clipRestoreCount);
    }
}
Also used : Path(android.graphics.Path) LimitLine(com.github.mikephil.charting.components.LimitLine) Paint(android.graphics.Paint)

Example 4 with LimitLine

use of com.github.mikephil.charting.components.LimitLine in project MPAndroidChart by PhilJay.

the class YAxisRendererHorizontalBarChart method renderLimitLines.

/**
     * Draws the LimitLines associated with this axis to the screen.
     * This is the standard XAxis renderer using the YAxis limit lines.
     *
     * @param c
     */
@Override
public void renderLimitLines(Canvas c) {
    List<LimitLine> limitLines = mYAxis.getLimitLines();
    if (limitLines == null || limitLines.size() <= 0)
        return;
    float[] pts = mRenderLimitLinesBuffer;
    pts[0] = 0;
    pts[1] = 0;
    pts[2] = 0;
    pts[3] = 0;
    Path limitLinePath = mRenderLimitLinesPathBuffer;
    limitLinePath.reset();
    for (int i = 0; i < limitLines.size(); i++) {
        LimitLine l = limitLines.get(i);
        if (!l.isEnabled())
            continue;
        int clipRestoreCount = c.save();
        mLimitLineClippingRect.set(mViewPortHandler.getContentRect());
        mLimitLineClippingRect.inset(-l.getLineWidth(), 0.f);
        c.clipRect(mLimitLineClippingRect);
        pts[0] = l.getLimit();
        pts[2] = l.getLimit();
        mTrans.pointValuesToPixel(pts);
        pts[1] = mViewPortHandler.contentTop();
        pts[3] = mViewPortHandler.contentBottom();
        limitLinePath.moveTo(pts[0], pts[1]);
        limitLinePath.lineTo(pts[2], pts[3]);
        mLimitLinePaint.setStyle(Paint.Style.STROKE);
        mLimitLinePaint.setColor(l.getLineColor());
        mLimitLinePaint.setPathEffect(l.getDashPathEffect());
        mLimitLinePaint.setStrokeWidth(l.getLineWidth());
        c.drawPath(limitLinePath, mLimitLinePaint);
        limitLinePath.reset();
        String label = l.getLabel();
        // if drawing the limit-value label is enabled
        if (label != null && !label.equals("")) {
            mLimitLinePaint.setStyle(l.getTextStyle());
            mLimitLinePaint.setPathEffect(null);
            mLimitLinePaint.setColor(l.getTextColor());
            mLimitLinePaint.setTypeface(l.getTypeface());
            mLimitLinePaint.setStrokeWidth(0.5f);
            mLimitLinePaint.setTextSize(l.getTextSize());
            float xOffset = l.getLineWidth() + l.getXOffset();
            float yOffset = Utils.convertDpToPixel(2f) + l.getYOffset();
            final LimitLine.LimitLabelPosition position = l.getLabelPosition();
            if (position == LimitLine.LimitLabelPosition.RIGHT_TOP) {
                final float labelLineHeight = Utils.calcTextHeight(mLimitLinePaint, label);
                mLimitLinePaint.setTextAlign(Align.LEFT);
                c.drawText(label, pts[0] + xOffset, mViewPortHandler.contentTop() + yOffset + labelLineHeight, mLimitLinePaint);
            } else if (position == LimitLine.LimitLabelPosition.RIGHT_BOTTOM) {
                mLimitLinePaint.setTextAlign(Align.LEFT);
                c.drawText(label, pts[0] + xOffset, mViewPortHandler.contentBottom() - yOffset, mLimitLinePaint);
            } else if (position == LimitLine.LimitLabelPosition.LEFT_TOP) {
                mLimitLinePaint.setTextAlign(Align.RIGHT);
                final float labelLineHeight = Utils.calcTextHeight(mLimitLinePaint, label);
                c.drawText(label, pts[0] - xOffset, mViewPortHandler.contentTop() + yOffset + labelLineHeight, mLimitLinePaint);
            } else {
                mLimitLinePaint.setTextAlign(Align.RIGHT);
                c.drawText(label, pts[0] - xOffset, mViewPortHandler.contentBottom() - yOffset, mLimitLinePaint);
            }
        }
        c.restoreToCount(clipRestoreCount);
    }
}
Also used : Path(android.graphics.Path) LimitLine(com.github.mikephil.charting.components.LimitLine) Paint(android.graphics.Paint)

Example 5 with LimitLine

use of com.github.mikephil.charting.components.LimitLine in project Gadgetbridge by Freeyourgadget.

the class LiveActivityFragment method addEntries.

private void addEntries(int timestamp) {
    mTotalStepsChart.setSingleEntryYValue(mSteps.getTotalSteps());
    YAxis stepsPerMinuteCurrentYAxis = mStepsPerMinuteCurrentChart.getAxisLeft();
    int maxStepsPerMinute = mSteps.getMaxStepsPerMinute();
    //        int extraRoom = maxStepsPerMinute/5;
    //        buggy in MPAndroidChart? Disable.
    //        stepsPerMinuteCurrentYAxis.setAxisMaxValue(Math.max(MIN_STEPS_PER_MINUTE, maxStepsPerMinute + extraRoom));
    LimitLine target = new LimitLine(maxStepsPerMinute);
    stepsPerMinuteCurrentYAxis.removeAllLimitLines();
    stepsPerMinuteCurrentYAxis.addLimitLine(target);
    int stepsPerMinute = mSteps.getStepsPerMinute(true);
    mStepsPerMinuteCurrentChart.setSingleEntryYValue(stepsPerMinute);
    if (!addHistoryDataSet(false)) {
        return;
    }
    ChartData data = mStepsPerMinuteHistoryChart.getData();
    if (stepsPerMinute < 0) {
        stepsPerMinute = 0;
    }
    mHistorySet.addEntry(new Entry(timestamp, stepsPerMinute));
    int hr = getCurrentHeartRate();
    if (hr < 0) {
        hr = 0;
    }
    mHeartRateSet.addEntry(new Entry(timestamp, hr));
}
Also used : Entry(com.github.mikephil.charting.data.Entry) BarEntry(com.github.mikephil.charting.data.BarEntry) ChartData(com.github.mikephil.charting.data.ChartData) LimitLine(com.github.mikephil.charting.components.LimitLine) Paint(android.graphics.Paint) YAxis(com.github.mikephil.charting.components.YAxis)

Aggregations

LimitLine (com.github.mikephil.charting.components.LimitLine)8 Paint (android.graphics.Paint)5 Path (android.graphics.Path)4 YAxis (com.github.mikephil.charting.components.YAxis)2 BarEntry (com.github.mikephil.charting.data.BarEntry)2 Typeface (android.graphics.Typeface)1 Legend (com.github.mikephil.charting.components.Legend)1 XAxis (com.github.mikephil.charting.components.XAxis)1 BarData (com.github.mikephil.charting.data.BarData)1 BarDataSet (com.github.mikephil.charting.data.BarDataSet)1 ChartData (com.github.mikephil.charting.data.ChartData)1 Entry (com.github.mikephil.charting.data.Entry)1 MPPointF (com.github.mikephil.charting.utils.MPPointF)1 MyMarkerView (com.xxmassdeveloper.mpchartexample.custom.MyMarkerView)1 ArrayList (java.util.ArrayList)1 ActivityAmounts (nodomain.freeyourgadget.gadgetbridge.model.ActivityAmounts)1