package com.github.mikephil.charting.renderer;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.Paint.Style;
import com.github.mikephil.charting.animation.ChartAnimator;
import com.github.mikephil.charting.data.DataSet;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.utils.Utils;
import com.github.mikephil.charting.utils.ViewPortHandler;
import java.util.HashSet;
/**
* Superclass of all render classes for the different data types (line, bar, ...).
*
* @author Philipp Jahoda
*/
public abstract class DataRenderer extends Renderer {
/**
* the animator object used to perform animations on the chart data
*/
protected ChartAnimator mAnimator;
/**
* main paint object used for rendering
*/
protected Paint mRenderPaint;
/**
* paint used for highlighting values
*/
protected Paint mHighlightPaint;
protected Paint mDrawPaint;
/**
* paint object for drawing values (text representing values of chart
* entries)
*/
protected Paint mValuePaint;
protected HashSet<Integer> mFixSet;
public void setFixSet(HashSet<Integer> fixSet) {
mFixSet = fixSet;
}
public DataRenderer(ChartAnimator animator, ViewPortHandler viewPortHandler) {
super(viewPortHandler);
this.mAnimator = animator;
mRenderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mRenderPaint.setStyle(Style.FILL);
mDrawPaint = new Paint(Paint.DITHER_FLAG);
mValuePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mValuePaint.setColor(Color.rgb(63, 63, 63));
mValuePaint.setTextAlign(Align.CENTER);
mValuePaint.setTextSize(Utils.convertDpToPixel(9f));
mHighlightPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mHighlightPaint.setStyle(Paint.Style.STROKE);
mHighlightPaint.setStrokeWidth(2f);
mHighlightPaint.setColor(Color.rgb(255, 187, 115));
}
/**
* Returns the Paint object this renderer uses for drawing the values
* (value-text).
*
* @return
*/
public Paint getPaintValues() {
return mValuePaint;
}
/**
* Returns the Paint object this renderer uses for drawing highlight
* indicators.
*
* @return
*/
public Paint getPaintHighlight() {
return mHighlightPaint;
}
/**
* Returns the Paint object used for rendering.
*
* @return
*/
public Paint getPaintRender() {
return mRenderPaint;
}
/**
* Applies the required styling (provided by the DataSet) to the value-paint
* object.
*
* @param set
*/
protected void applyValueTextStyle(DataSet<?> set) {
mValuePaint.setColor(set.getValueTextColor());
mValuePaint.setTypeface(set.getValueTypeface());
mValuePaint.setTextSize(set.getValueTextSize());
}
/**
* Initializes the buffers used for rendering with a new size. Since this
* method performs memory allocations, it should only be called if
* necessary.
*/
public abstract void initBuffers();
/**
* Draws the actual data in form of lines, bars, ... depending on Renderer subclass.
*
* @param c
*/
public abstract void drawData(Canvas c);
/**
* Loops over all Entrys and draws their values.
*
* @param c
*/
public abstract void drawValues(Canvas c);
/**
* Draws the value of the given entry by using the provided ValueFormatter.
*
* @param c canvas
* @param formatter formatter for custom value-formatting
* @param value the value to be drawn
* @param entry the entry the value belongs to
* @param dataSetIndex the index of the DataSet the drawn Entry belongs to
* @param x position
* @param y position
*/
public void drawValue(Canvas c, ValueFormatter formatter, float value, Entry entry, int dataSetIndex, float x, float y) {
c.drawText(formatter.getFormattedValue(value, entry, dataSetIndex, mViewPortHandler), x, y, mValuePaint);
}
public void drawIcon(Canvas c, String xValue, float x, float y) {
float txtWidht = mValuePaint.getTextSize();
if ("".equals(xValue) || null == xValue) {
return;
}
Integer xValueInt = Integer.valueOf(xValue);
if (xValueInt >= 0) {
if (xValueInt <= 32) {
c.drawText("G", x, y - txtWidht, mValuePaint);
} else if (xValueInt <= 100) {
c.drawText("S", x, y - txtWidht, mValuePaint);
} else if (xValueInt <= 200) {
c.drawText("J", x, y - txtWidht, mValuePaint);
} else {
c.drawText("B", x, y - txtWidht, mValuePaint);
}
}
}
/**
* Draws any kind of additional information (e.g. line-circles).
*
* @param c
*/
public abstract void drawExtras(Canvas c);
/**
* Draws all highlight indicators for the values that are currently highlighted.
*
* @param c
* @param indices the highlighted values
*/
public abstract void drawHighlighted(Canvas c, Highlight[] indices);
}