Search in sources :

Example 1 with ViewPortHandler

use of com.github.mikephil.charting.utils.ViewPortHandler in project MPAndroidChart by PhilJay.

the class ScatterChartRenderer method drawDataSet.

protected void drawDataSet(Canvas c, IScatterDataSet dataSet) {
    ViewPortHandler viewPortHandler = mViewPortHandler;
    Transformer trans = mChart.getTransformer(dataSet.getAxisDependency());
    float phaseY = mAnimator.getPhaseY();
    IShapeRenderer renderer = dataSet.getShapeRenderer();
    if (renderer == null) {
        Log.i("MISSING", "There's no IShapeRenderer specified for ScatterDataSet");
        return;
    }
    int max = (int) (Math.min(Math.ceil((float) dataSet.getEntryCount() * mAnimator.getPhaseX()), (float) dataSet.getEntryCount()));
    for (int i = 0; i < max; i++) {
        Entry e = dataSet.getEntryForIndex(i);
        mPixelBuffer[0] = e.getX();
        mPixelBuffer[1] = e.getY() * phaseY;
        trans.pointValuesToPixel(mPixelBuffer);
        if (!viewPortHandler.isInBoundsRight(mPixelBuffer[0]))
            break;
        if (!viewPortHandler.isInBoundsLeft(mPixelBuffer[0]) || !viewPortHandler.isInBoundsY(mPixelBuffer[1]))
            continue;
        mRenderPaint.setColor(dataSet.getColor(i / 2));
        renderer.renderShape(c, dataSet, mViewPortHandler, mPixelBuffer[0], mPixelBuffer[1], mRenderPaint);
    }
}
Also used : IShapeRenderer(com.github.mikephil.charting.renderer.scatter.IShapeRenderer) Entry(com.github.mikephil.charting.data.Entry) Transformer(com.github.mikephil.charting.utils.Transformer) ViewPortHandler(com.github.mikephil.charting.utils.ViewPortHandler)

Example 2 with ViewPortHandler

use of com.github.mikephil.charting.utils.ViewPortHandler in project MPAndroidChart by PhilJay.

the class BarLineChartTouchListener method getTrans.

/**
     * Returns a recyclable MPPointF instance.
     * returns the correct translation depending on the provided x and y touch
     * points
     *
     * @param x
     * @param y
     * @return
     */
public MPPointF getTrans(float x, float y) {
    ViewPortHandler vph = mChart.getViewPortHandler();
    float xTrans = x - vph.offsetLeft();
    float yTrans = 0f;
    // check if axis is inverted
    if (inverted()) {
        yTrans = -(y - vph.offsetTop());
    } else {
        yTrans = -(mChart.getMeasuredHeight() - y - vph.offsetBottom());
    }
    return MPPointF.getInstance(xTrans, yTrans);
}
Also used : ViewPortHandler(com.github.mikephil.charting.utils.ViewPortHandler)

Example 3 with ViewPortHandler

use of com.github.mikephil.charting.utils.ViewPortHandler in project MPAndroidChart by PhilJay.

the class BarLineChartTouchListener method performZoom.

/**
     * Performs the all operations necessary for pinch and axis zoom.
     *
     * @param event
     */
private void performZoom(MotionEvent event) {
    if (event.getPointerCount() >= 2) {
        // two finger zoom
        OnChartGestureListener l = mChart.getOnChartGestureListener();
        // get the distance between the pointers of the touch event
        float totalDist = spacing(event);
        if (totalDist > mMinScalePointerDistance) {
            // get the translation
            MPPointF t = getTrans(mTouchPointCenter.x, mTouchPointCenter.y);
            ViewPortHandler h = mChart.getViewPortHandler();
            // take actions depending on the activated touch mode
            if (mTouchMode == PINCH_ZOOM) {
                mLastGesture = ChartGesture.PINCH_ZOOM;
                // total scale
                float scale = totalDist / mSavedDist;
                boolean isZoomingOut = (scale < 1);
                boolean canZoomMoreX = isZoomingOut ? h.canZoomOutMoreX() : h.canZoomInMoreX();
                boolean canZoomMoreY = isZoomingOut ? h.canZoomOutMoreY() : h.canZoomInMoreY();
                float scaleX = (mChart.isScaleXEnabled()) ? scale : 1f;
                float scaleY = (mChart.isScaleYEnabled()) ? scale : 1f;
                if (canZoomMoreY || canZoomMoreX) {
                    mMatrix.set(mSavedMatrix);
                    mMatrix.postScale(scaleX, scaleY, t.x, t.y);
                    if (l != null)
                        l.onChartScale(event, scaleX, scaleY);
                }
            } else if (mTouchMode == X_ZOOM && mChart.isScaleXEnabled()) {
                mLastGesture = ChartGesture.X_ZOOM;
                float xDist = getXDist(event);
                // x-axis scale
                float scaleX = xDist / mSavedXDist;
                boolean isZoomingOut = (scaleX < 1);
                boolean canZoomMoreX = isZoomingOut ? h.canZoomOutMoreX() : h.canZoomInMoreX();
                if (canZoomMoreX) {
                    mMatrix.set(mSavedMatrix);
                    mMatrix.postScale(scaleX, 1f, t.x, t.y);
                    if (l != null)
                        l.onChartScale(event, scaleX, 1f);
                }
            } else if (mTouchMode == Y_ZOOM && mChart.isScaleYEnabled()) {
                mLastGesture = ChartGesture.Y_ZOOM;
                float yDist = getYDist(event);
                // y-axis scale
                float scaleY = yDist / mSavedYDist;
                boolean isZoomingOut = (scaleY < 1);
                boolean canZoomMoreY = isZoomingOut ? h.canZoomOutMoreY() : h.canZoomInMoreY();
                if (canZoomMoreY) {
                    mMatrix.set(mSavedMatrix);
                    mMatrix.postScale(1f, scaleY, t.x, t.y);
                    if (l != null)
                        l.onChartScale(event, 1f, scaleY);
                }
            }
            MPPointF.recycleInstance(t);
        }
    }
}
Also used : MPPointF(com.github.mikephil.charting.utils.MPPointF) ViewPortHandler(com.github.mikephil.charting.utils.ViewPortHandler)

Example 4 with ViewPortHandler

use of com.github.mikephil.charting.utils.ViewPortHandler in project Gadgetbridge by Freeyourgadget.

the class SleepChartFragment method refreshSleepAmounts.

private MySleepChartsData refreshSleepAmounts(GBDevice mGBDevice, List<? extends ActivitySample> samples) {
    ActivityAnalysis analysis = new ActivityAnalysis();
    ActivityAmounts amounts = analysis.calculateActivityAmounts(samples);
    PieData data = new PieData();
    List<PieEntry> entries = new ArrayList<>();
    List<Integer> colors = new ArrayList<>();
    //        int index = 0;
    long totalSeconds = 0;
    for (ActivityAmount amount : amounts.getAmounts()) {
        if ((amount.getActivityKind() & ActivityKind.TYPE_SLEEP) != 0) {
            long value = amount.getTotalSeconds();
            totalSeconds += value;
            //                entries.add(new PieEntry(value, index++));
            entries.add(new PieEntry(value, amount.getName(getActivity())));
            colors.add(getColorFor(amount.getActivityKind()));
        //                data.addXValue(amount.getName(getActivity()));
        }
    }
    String totalSleep = DateTimeUtils.formatDurationHoursMinutes(totalSeconds, TimeUnit.SECONDS);
    PieDataSet set = new PieDataSet(entries, "");
    set.setValueFormatter(new IValueFormatter() {

        @Override
        public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
            return DateTimeUtils.formatDurationHoursMinutes((long) value, TimeUnit.SECONDS);
        }
    });
    set.setColors(colors);
    data.setDataSet(set);
    //setupLegend(pieChart);
    return new MySleepChartsData(totalSleep, data);
}
Also used : PieEntry(com.github.mikephil.charting.data.PieEntry) ArrayList(java.util.ArrayList) ActivityAmount(nodomain.freeyourgadget.gadgetbridge.model.ActivityAmount) ViewPortHandler(com.github.mikephil.charting.utils.ViewPortHandler) Entry(com.github.mikephil.charting.data.Entry) LegendEntry(com.github.mikephil.charting.components.LegendEntry) PieEntry(com.github.mikephil.charting.data.PieEntry) IValueFormatter(com.github.mikephil.charting.formatter.IValueFormatter) ActivityAmounts(nodomain.freeyourgadget.gadgetbridge.model.ActivityAmounts) PieDataSet(com.github.mikephil.charting.data.PieDataSet) PieData(com.github.mikephil.charting.data.PieData)

Aggregations

ViewPortHandler (com.github.mikephil.charting.utils.ViewPortHandler)4 Entry (com.github.mikephil.charting.data.Entry)2 LegendEntry (com.github.mikephil.charting.components.LegendEntry)1 PieData (com.github.mikephil.charting.data.PieData)1 PieDataSet (com.github.mikephil.charting.data.PieDataSet)1 PieEntry (com.github.mikephil.charting.data.PieEntry)1 IValueFormatter (com.github.mikephil.charting.formatter.IValueFormatter)1 IShapeRenderer (com.github.mikephil.charting.renderer.scatter.IShapeRenderer)1 MPPointF (com.github.mikephil.charting.utils.MPPointF)1 Transformer (com.github.mikephil.charting.utils.Transformer)1 ArrayList (java.util.ArrayList)1 ActivityAmount (nodomain.freeyourgadget.gadgetbridge.model.ActivityAmount)1 ActivityAmounts (nodomain.freeyourgadget.gadgetbridge.model.ActivityAmounts)1