MPAndroidChart - 在所有可见折线图上缩放或缩放x分辨率

时间:2015-09-08 06:48:41

标签: java android charts linechart mpandroidchart

我同时拥有多达12个可见的折线图。每个人都实时显示1个模拟或数字信号。现在我想用捏合来缩放X分辨率(这已经在单线图上工作)但是现在所有的线图都应该同时缩放相同的比例因子。

enter image description here

我在每个线图上都使用onTouchListener进行了尝试,如果有人触摸并缩放,则说明它是另一个的缩放。

LineChartObject ob = mLineChartObj.get(lineChartObj);

if (ob.lineChart == null)
//    new LineChart
  ob.lineChart = new LineChart(mContext);
ob.lineChart.setOnTouchListener(new View.OnTouchListener() {
  @Override
  public boolean onTouch(View v, MotionEvent event) {
    float[] val = {ob.lineChart.getScaleX(), ob.lineChart.getScaleY(), ob.lineChart.getX(), ob.lineChart.getY()};

    for(int i=0; i<mLineChartObj.size(); i++){
      if(i == lineChartObj)
        continue;
      mLineChartObj.get(i).lineChart.setScaleX(val[0]); //zoom(val[0], val[1], val[2], val[3]);
    }
    return false;
  }
});

我取实际触摸的折线图的scaleX,并将其交给另一个,但这不起作用。

也许你知道如何解决这个问题。

编辑1:############################################ ##########

我试过这段代码......我观察过printLines并注意到scaleX越大,我用触摸手势放大的越多。正如预期的那样,scaleX越小,我用手势缩小的越多。在Y方向上,scaleY也会变大或变小。

但是!!我称之为zoom(val [0],val [1],....)的折线图只是放大,虽然scaleX / scaleY变小!!

  ob.lineChart.setOnTouchListener(new View.OnTouchListener() {
  @Override
  public boolean onTouch(View v, MotionEvent event) {
    float[] val = {ob.lineChart.getScaleX(), ob.lineChart.getScaleY(), ob.lineChart.getWidth() / 2, ob.lineChart.getHeight() / 2};
    for (int i = 0; i < mLineChartObj.size(); i++) {
      if (i == lineChartObj)
        continue;

      mLineChartObj.get(i).zoomCounter++;
//          zoomCounter to get a slower zoom
      if (mLineChartObj.get(i).zoomCounter % 10 == 0) {
        System.out.println("§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§");
        System.out.println("scaleX: " + val[0]);
        System.out.println("scaleY: " + val[1]);
        System.out.println("Width/2: " + val[2]);
        System.out.println("Height/2: " + val[3]);
        System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
        mLineChartObj.get(i).lineChart.zoom(val[0], val[1], mLineChartObj.get(i).lineChart.getWidth() / 2, mLineChartObj.get(i).lineChart.getHeight() / 2); //zoom(val[0], val[1], val[2], val[3]);
        System.out.println(val[0] + " " + val[1] + " " + val[2] + " " + val[3]);
        System.out.println(val[0] + " " + val[1] + " " + mLineChartObj.get(i).lineChart.getWidth() / 2 + " " + mLineChartObj.get(i).lineChart.getHeight() / 2);
      }
    }
    return false;
  }
});

1 个答案:

答案 0 :(得分:0)

我建议你阅读tutorial on interaction with the charts。该库提供了一个侦听器概念(OnChartGestureListener),允许对图表上执行的平移或缩放等手势做出反应。

所以你可以做的是设置一个监听器到缩放的图表,然后在监听器的回调方法中也缩放其他图表。