【问题标题】:MPAndroidChart - How to change ValueFormatter while zooming?MPAndroidChart - 如何在缩放时更改 ValueFormatter?
【发布时间】:2016-07-01 21:37:03
【问题描述】:

我正在使用 MPAndroidChart 库。我正在使用 CustomValueFormatter 格式化浮点值,使其精度为 1。

CustomValueFormatter 代码:

public class CustomYAxisValueFormatter implements YAxisValueFormatter {

    private DecimalFormat mFormat;

    public CustomYAxisValueFormatter() {
        mFormat = new DecimalFormat("###,###,###,##0.0"); // sets precision to 1
    }

    @Override
    public String getFormattedValue(float value, YAxis yAxis) {
        return mFormat.format(value);
    }
}

我正在将格式化程序设置为 y 轴。

设置格式化程序:

    YAxis yAxis = lineChart.getAxisLeft(); //show left y-axis line        
    yAxis.setValueFormatter(new CustomYAxisValueFormatter()); // set value formatter to format y-values.

由于setValueFormatter(YAxisValueFormatter),默认创建了上面的格式化程序(CustomYAxisValueFormatter)

问题是无法在缩放时重新创建 CustomYAxisValueFormatter,从而导致 y 值重复。

是否可以创建一个 CustomValueFormatter 来根据缩放级别更改值的精度?

【问题讨论】:

  • stackoverflow.com/questions/32569618/… 如果这有帮助的话。
  • @Dhina 感谢您的帮助。但是您提供的链接中的答案涉及强制 y 轴中的值数量。它根据缩放级别限制 y 值计数。即使该解决方案在无限缩放时也会导致重复的 y 值。我只需要根据缩放级别更改值的精度。

标签: android mpandroidchart


【解决方案1】:

你试过setOnChartGestureListener

 lineChart.setOnChartGestureListener(new OnChartGestureListener() {
            @Override
            public void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {

            }

            @Override
            public void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
               if(lastPerformedGesture == ChartTouchListener.ChartGesture.PINCH_ZOOM) {
                   YAxis yAxis = lineChart.getAxisLeft(); //show left y-axis line        
                   yAxis.setValueFormatter(new CustomYAxisValueFormatter()); // setting your new value formatter
               }
            }

            @Override
            public void onChartLongPressed(MotionEvent me) {

            }

            @Override
            public void onChartDoubleTapped(MotionEvent me) {

            }

            @Override
            public void onChartSingleTapped(MotionEvent me) {

            }

            @Override
            public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {

            }

            @Override
            public void onChartScale(MotionEvent me, float scaleX, float scaleY) {

            }

            @Override
            public void onChartTranslate(MotionEvent me, float dX, float dY) {

            }
        });

【讨论】:

  • 我试过这个。但我无法根据缩放级别计算精度值。缩放级别必须传递给 CustomYAxisValueFormatter 的构造函数,该构造函数将根据缩放级别参数更改精度。是否可以关联缩放级别和精度?
  • 基于缩放级别的精度值。你能详细说明这到底是什么意思吗?
  • 如果图表被放大,我需要检查可见的 y 值。如果它们重复,精度必须增加 1。是否可以根据当前缩放级别查看图表是否有任何重复的 y 值(有没有办法根据 scaleY 值计算图表的缩放程度? ??)
  • 你可以从 MotionEvent 中使用它吗?引用自getYPrecision "返回所报告的 Y 坐标的精度。您可以将此数字与 getY() 相乘以找到 Y 坐标的实际硬件值。"
  • 但是我必须检查轴中显示的值是否重复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
  • 2018-05-17
相关资源
最近更新 更多