package com.github.mikephil.charting.components; import com.github.mikephil.charting.formatter.DefaultXAxisValueFormatter; import com.github.mikephil.charting.formatter.XAxisValueFormatter; import java.util.ArrayList; import java.util.List; /** * Class representing the x-axis labels settings. Only use the setter methods to * modify it. Do not access public variables directly. Be aware that not all * features the XLabels class provides are suitable for the RadarChart. * * @author Philipp Jahoda */ public class XAxis extends AxisBase { /** * the arraylist containing all the x-axis labels */ protected List<String> mValues = new ArrayList<>(); /** * width of the x-axis labels in pixels - this is calculated by the * calcTextWidth() method of the utils */ public int mLabelWidth = 1; /** * height of the x-axis labels in pixels - this is calculated by the * calcTextHeight() method of the utils */ public int mLabelHeight = 1; /** * the space that should be left out (in characters) between the x-axis * labels */ private int mSpaceBetweenLabels = 4; /** * the modulus that indicates if a value at a specified index in an * array(list) for the x-axis-labels is drawn or not. If index % modulus == * 0 DRAW, else dont draw. */ public int mAxisLabelModulus = 1; /** * Is axisLabelModulus a custom value or auto calculated? If false, then * it's auto, if true, then custom. default: false (automatic modulus) */ private boolean mIsAxisModulusCustom = false; /** * the modulus that indicates if a value at a specified index in an * array(list) for the y-axis-labels is drawn or not. If index % modulus == * 0 DRAW, else dont draw. THIS IS ONLY FOR HORIZONTAL BARCHART. */ public int mYAxisLabelModulus = 1; /** * if set to true, the chart will avoid that the first and last label entry * in the chart "clip" off the edge of the chart */ private boolean mAvoidFirstLastClipping = false; /** * Custom formatter for adjusting x-value strings */ protected XAxisValueFormatter mXAxisValueFormatter = new DefaultXAxisValueFormatter(); /** * the position of the x-labels relative to the chart */ private XAxisPosition mPosition = XAxisPosition.TOP; /** * enum for the position of the x-labels relative to the chart */ public enum XAxisPosition { TOP, BOTTOM, BOTH_SIDED, TOP_INSIDE, BOTTOM_INSIDE } public XAxis() { super(); } /** * returns the position of the x-labels */ public XAxisPosition getPosition() { return mPosition; } /** * sets the position of the x-labels * * @param pos */ public void setPosition(XAxisPosition pos) { mPosition = pos; } /** * Sets the space (in characters) that should be left out between the x-axis * labels, default 4. This only applies if the number of labels that will be * skipped in between drawn axis labels is not custom set. * * @param spaceCharacters */ public void setSpaceBetweenLabels(int spaceCharacters) { mSpaceBetweenLabels = spaceCharacters; } /** * Sets the number of labels that should be skipped on the axis before the * next label is drawn. This will disable the feature that automatically * calculates an adequate space between the axis labels and set the number * of labels to be skipped to the fixed number provided by this method. Call * resetLabelsToSkip(...) to re-enable automatic calculation. * * @param count */ public void setLabelsToSkip(int count) { if (count < 0) count = 0; mIsAxisModulusCustom = true; mAxisLabelModulus = count + 1; } /** * Calling this will disable a custom number of labels to be skipped (set by * setLabelsToSkip(...)) while drawing the x-axis. Instead, the number of * values to skip will again be calculated automatically. */ public void resetLabelsToSkip() { mIsAxisModulusCustom = false; } /** * Returns true if a custom axis-modulus has been set that determines the * number of labels to skip when drawing. * * @return */ public boolean isAxisModulusCustom() { return mIsAxisModulusCustom; } /** * Returns the space (in characters) that should be left out between the * x-axis labels */ public int getSpaceBetweenLabels() { return mSpaceBetweenLabels; } /** * if set to true, the chart will avoid that the first and last label entry * in the chart "clip" off the edge of the chart or the screen * * @param enabled */ public void setAvoidFirstLastClipping(boolean enabled) { mAvoidFirstLastClipping = enabled; } /** * returns true if avoid-first-lastclipping is enabled, false if not * * @return */ public boolean isAvoidFirstLastClippingEnabled() { return mAvoidFirstLastClipping; } /** * Sets the labels for this axis. * * @param values */ public void setValues(List<String> values) { mValues = values; } /** * Returns the labels for this axis. * * @return */ public List<String> getValues() { return mValues; } /** * Sets a custom XAxisValueFormatter for the data object that allows custom-formatting * of all x-values before rendering them. Provide null to reset back to the * default formatting. * * @param formatter */ public void setValueFormatter(XAxisValueFormatter formatter) { if (formatter == null) mXAxisValueFormatter = new DefaultXAxisValueFormatter(); else mXAxisValueFormatter = formatter; } /** * Returns the custom XAxisValueFormatter that is set for this data object. * * @return */ public XAxisValueFormatter getValueFormatter() { return mXAxisValueFormatter; } @Override public String getLongestLabel() { String longest = ""; for (int i = 0; i < mValues.size(); i++) { String text = mValues.get(i); if (longest.length() < text.length()) longest = text; } return longest; } }