2016-03-16 19 views
6

Ich verwende MPAndroidChart-Bibliothek. Ich verwende einen CustomValueFormatter, die die Float-Werte so formatiert, dass ihre Genauigkeit 1.MPAndroidChart - Wie ändere ich ValueFormatter beim Zoomen?

CustomValueFormatter-Code ist:

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

Ich gründe die Formatierungs auf der y-Achse.

Einstellen der Formatierer:

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

Als Ergebnis setValueFormatter(YAxisValueFormatter), die oben Formatierer (CustomYAxisValueFormatter) wird standardmäßig erstellt.

Das Problem ist, dass CustomYAxisValueFormatter beim Zoomen nicht neu erstellt werden kann, was zu sich wiederholenden y-Werten führt.

Ist es möglich, einen CustomValueFormatter zu erstellen, der die Genauigkeit der Werte basierend auf der Zoomstufe ändert?

+1

http://stackoverflow.com/questions/32569618/mpandroidchart-how-can-i-avoid-the-repeated-values-in-y-axis wenn diese versuchen kann Hilfe geben. – Dhina

+0

@Dhina Vielen Dank für Ihre Hilfe. Die Antworten in dem von Ihnen angegebenen Link beziehen sich jedoch auf die Anzahl der Werte in der y-Achse. Die Anzahl der Y-Werte hängt von der Zoomstufe ab. Sogar diese Lösung verursacht wiederholte y-Werte beim unendlichen Zoomen. Alles, was ich brauche, ist die Genauigkeit der Werte entsprechend der Zoomstufe zu ändern. –

Antwort

0

Haben Sie 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

Ich habe das versucht. Aber ich kann keine Präzisionswerte basierend auf der Zoomstufe berechnen. Die Zoomstufe muss an den Konstruktor von CustomYAxisValueFormatter übergeben werden, der die Genauigkeit entsprechend dem Zoom-Level-Parameter ändert. Ist es möglich, Zoomstufe und -genauigkeit zu beziehen? –

+0

_Präzisionswerte basierend auf der Zoomstufe._ Können Sie näher erläutern, was genau das bedeutet? – Dhina

+0

Wenn das Diagramm gezoomt ist, muss ich sichtbare Y-Werte überprüfen. Wenn sie wiederholt werden, muss die Genauigkeit um 1 erhöht werden. Ist es möglich zu überprüfen, ob das Diagramm auf der aktuellen gezoomten Ebene repetitive y-Werte hat (Gibt es eine Möglichkeit zu berechnen, wie stark das Diagramm basierend auf scaleY-Werten gezoomt wird ???) –

Verwandte Themen