How to increase the zoom ratio when you click to enlarge the graph - AChartEngine

We use AChargEngine in our Android app and work great. But when I do this to zoom in, I want to increase the zoom ratio.

Example:

If I am doing a normal pinch to zoom, and in this case, if it is scaled by 100 pixels, I want it to increase 200px, making a normal pinch to zoom.

Is there a way to achieve this?

Help Wanted.

Thanks in advance.

UPDATE:

Here is my code:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.activity_blutdruck_chart_landscape);
    loadChart();
    mChart = ChartFactory.getLineChartView(BlutDruckChartLandscape.this,
             mDataset,
             mRenderer);
}

public void loadChart() {
    initChart();
    setRenderingStyle();
    fillData(WEEK);

    if (graphDatas.size() > 0) {
        mRenderer.setPanLimits(new double[] { (dateLabels[0].longValue() - (GraphUtilities.DAY)), mRenderer.getXAxisMax(), mRenderer.getYAxisMin(), mRenderer.getYAxisMax() });
    }
}

public void initChart() {
    mDataset = new XYMultipleSeriesDataset();
    mDiastolicSeries = new TimeSeries("Diastolic");
    mSystolicSeries = new TimeSeries("Systolic");
    mPulseSeries = new TimeSeries("Pulse");
    mDataset.addSeries(mDiastolicSeries);
    mDataset.addSeries(mSystolicSeries);
    if (isPulseEnabled) {
        mDataset.addSeries(mPulseSeries);
    }
    mRenderer = new XYMultipleSeriesRenderer();
    mDiastolicRenderer = new XYSeriesRenderer();
    mDiastolicRenderer.setPointStyle(PointStyle.CIRCLE);
    mDiastolicRenderer.setFillPoints(true);
    mDiastolicRenderer.setLineWidth(GraphUtilities.LINE_WIDHT * multiplicationFactor);
    mDiastolicRenderer.setColor(getResources().getColor(R.color.graph_diastolic_gray));
    mRenderer.addSeriesRenderer(mDiastolicRenderer);

    mSystolicRenderer = new XYSeriesRenderer();
    mSystolicRenderer.setPointStyle(PointStyle.CIRCLE);
    mSystolicRenderer.setFillPoints(true);
    mSystolicRenderer.setLineWidth(GraphUtilities.LINE_WIDHT * multiplicationFactor);
    mSystolicRenderer.setColor(getResources().getColor(R.color.graph_systolic_blue));
    mRenderer.addSeriesRenderer(mSystolicRenderer);

    mPulseRenderer = new XYSeriesRenderer();
    mPulseRenderer.setPointStyle(PointStyle.CIRCLE);
    mPulseRenderer.setFillPoints(true);
    mPulseRenderer.setLineWidth(GraphUtilities.LINE_WIDHT * multiplicationFactor);
    mPulseRenderer.setColor(getResources().getColor(R.color.graph_pulse_white));
    if (isPulseEnabled) {
        mRenderer.addSeriesRenderer(mPulseRenderer);
    }
}

public void setRenderingStyle() {
    mRenderer.setBackgroundColor(getResources().getColor(R.color.ilink_blue));
    mRenderer.setMarginsColor(getResources().getColor(R.color.ilink_blue));
    mRenderer.setGridColor(Color.WHITE);
    mRenderer.setShowCustomTextGridX(false);
    mRenderer.setShowCustomTextGridY(true);
    mRenderer.setAntialiasing(true); // Also tried setting antialiasing to false but not helped.
    mRenderer.setPanEnabled(true, false);
    mRenderer.setZoomEnabled(true, false);
    mRenderer.setZoomButtonsVisible(false);
    mRenderer.setXLabelsColor(Color.WHITE);
    mRenderer.setYLabelsColor(0, Color.WHITE);
    mRenderer.setXLabelsAlign(Align.CENTER);
    mRenderer.setXLabelsPadding(10);
    mRenderer.setXLabelsAngle(-30.0f);
    mRenderer.setYLabelsAlign(Align.RIGHT);
    mRenderer.setPointSize(GraphUtilities.POINT_SIZE * multiplicationFactor);
    mRenderer.setInScroll(true);
    mRenderer.setShowLegend(false);
    mRenderer.setLabelsTextSize(GraphUtilities.TEXT_SIZE * multiplicationFactor);
    mRenderer.setLabelsTextSize(GraphUtilities.TEXT_SIZE * multiplicationFactor);
    mRenderer.setChartTitleTextSize(GraphUtilities.TEXT_SIZE * multiplicationFactor);
    mRenderer.setMargins(new int[] { (int) (5 * multiplicationFactor), (int) (25 * multiplicationFactor), (int) (10 * multiplicationFactor), (int) (10 * multiplicationFactor) });
    mRenderer.setShowTickMarks(false);
    mRenderer.setYLabelsVerticalPadding(-2 * multiplicationFactor);
    mRenderer.setZoomRate(5.0f);
}

Thank.

+4
source share
3 answers

This may help you:

            multiRenderer.setZoomButtonsVisible(true);
            multiRenderer.setZoomEnabled(enabled);
            multiRenderer.setZoomInLimitX("VALUE");
            multiRenderer.setZoomInLimitY("VALUE");

OR

     multiRenderer.setZoomButtonsVisible(true);
     multiRenderer.setZoomEnabled(enabled);
     multiRenderer.setZoomLimits("Array of Zoom value of X and Y ");
0
source

, .

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener
{

        @Override
        public boolean onScale(ScaleGestureDetector detector)
        {
            scaleFactor *= detector.getScaleFactor();
            scaleFactor = Math.max(MIN_ZOOM, Math.min(scaleFactor, MAX_ZOOM));
            invalidate();
            return true;
        }
}

double scaleFactor , , .

    scale(scaleFactor, scaleFactor);
0

You do not need to change the source code. You can call renderer.setZoomRate()before you build the graph itself.

0
source

Source: https://habr.com/ru/post/1540828/


All Articles