如何在捏缩放图形时增加变焦倍率 - AChartEngine

时间:2014-05-16 05:50:21

标签: android achartengine

我们在Android应用程序中使用AChargEngine,它工作得很好。 但是当我捏它来缩放它的变焦时,我想提高缩放比率。

示例:

如果我正常捏缩放,那么如果它是100px缩放,那么我希望它缩放200px进行正常捏缩放。

有什么方法可以实现这个目标吗?

需要帮助。

提前致谢。

更新:

这是我的代码:

@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);
}

感谢。

3 个答案:

答案 0 :(得分:0)

它可以帮到你:

            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 ");

答案 1 :(得分:0)

我使用以下代码进行捏拉缩放,缩放比例会随着捏拉变焦的速度增加而增加。

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;
        }
}

创建一个全局双scaleFactor变量,并使用如下所示的值将缩放因子应用于您的视图。

    scale(scaleFactor, scaleFactor);

答案 2 :(得分:0)

您不必修改源代码。您可以在构建图表之前调用renderer.setZoomRate()