2016-03-16 11 views
6

Używam biblioteki MPAndroidChart. Używam CustomValueFormatter który formatuje wartości Float takie, że ich precyzja jest 1.MPAndroidChart - Jak zmienić ValueFormatter podczas powiększania?

CustomValueFormatter Kod:

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

ja ustawienie formatowania do osi y.

Ustawianie formatowania:

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

Wskutek setValueFormatter(YAxisValueFormatter) powyższy formater (CustomYAxisValueFormatter) jest tworzony domyślnie.

Problem polega na tym, że CustomYAxisValueFormatter nie może zostać odtworzony po powiększeniu, co skutkuje powtarzającymi się wartościami y.

Czy jest możliwe utworzenie CustomValueFormatter, które zmienia dokładność wartości na podstawie poziomu powiększenia?

+1

http://stackoverflow.com/questions/32569618/mpandroidchart-how-can-i-avoid-the-repeated-values-in-y-axis jeśli to możliwe być jakiejkolwiek pomocy. – Dhina

+0

@Dhina Dziękuję za pomoc. Ale odpowiedzi w podanym przez Ciebie linku dotyczą wymuszania liczby wartości w y- osi. Ogranicza ona liczbę wartości y na podstawie poziomu powiększenia. Nawet to rozwiązanie powoduje powtarzające się wartości y na nieskończonym powiększeniu. Wszystko, czego potrzebuję, to zmienić dokładność wartości zgodnie z poziomem powiększenia. –

Odpowiedz

0

Próbowałeś 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) { 

      } 
     }); 
+0

Próbowałem tego. Ale nie mogę obliczyć dokładnych wartości na podstawie poziomu powiększenia. Poziom powiększenia należy przekazać do konstruktora CustomYAxisValueFormatter, który zmieni dokładność zgodnie z parametrem poziomu powiększenia. Czy można powiązać poziom powiększenia i precyzję? –

+0

_precision wartości oparte na poziomie zoomu. Czy możesz wyjaśnić, co to dokładnie oznacza? – Dhina

+0

Jeśli wykres jest powiększony, muszę sprawdzić widoczne wartości y. Jeśli są powtórzone, precyzja musi zostać zwiększona o 1. Czy można sprawdzić, czy wykres ma powtarzalne wartości y oparte na bieżącym powiększonym poziomie (Czy istnieje sposób na obliczenie, jak bardzo jest powiększany wykres na podstawie wartości scaleY? ???) –

Powiązane problemy