/* | |
* Copyright 2012 AndroidPlot.com | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package com.androidplot.xy; | |
import android.content.Context; | |
import android.graphics.Color; | |
import android.graphics.Paint; | |
import com.androidplot.ui.SeriesRenderer; | |
import com.androidplot.util.Configurator; | |
import com.androidplot.util.PixelUtils; | |
/** | |
* Defines the visual aesthetics of an XYSeries; outline color and width, fill style, | |
* vertex size and color, shadowing, etc. | |
*/ | |
public class LineAndPointFormatter extends XYSeriesFormatter<XYRegionFormatter> { | |
private static final float DEFAULT_LINE_STROKE_WIDTH_DP = 1.5f; | |
private static final float DEFAULT_VERTEX_STROKE_WIDTH_DP = 4.5f; | |
// default implementation prints point's yVal: | |
private PointLabeler pointLabeler = new PointLabeler() { | |
@Override | |
public String getLabel(XYSeries series, int index) { | |
return series.getY(index) + ""; | |
} | |
}; | |
public FillDirection getFillDirection() { | |
return fillDirection; | |
} | |
/** | |
* Sets which edge to use to close the line's path for filling purposes. | |
* See {@link FillDirection}. | |
* @param fillDirection | |
*/ | |
public void setFillDirection(FillDirection fillDirection) { | |
this.fillDirection = fillDirection; | |
} | |
protected FillDirection fillDirection = FillDirection.BOTTOM; | |
protected Paint linePaint; | |
protected Paint vertexPaint; | |
protected Paint fillPaint; | |
private PointLabelFormatter pointLabelFormatter; | |
{ | |
initLinePaint(Color.BLACK); | |
} | |
/** | |
* Should only be used in conjunction with calls to configure()... | |
*/ | |
public LineAndPointFormatter() { | |
this(Color.RED, Color.GREEN, Color.BLUE, null); | |
} | |
public LineAndPointFormatter(Integer lineColor, Integer vertexColor, Integer fillColor, PointLabelFormatter plf) { | |
this(lineColor, vertexColor, fillColor, plf, FillDirection.BOTTOM); | |
} | |
public LineAndPointFormatter(Integer lineColor, Integer vertexColor, Integer fillColor, PointLabelFormatter plf, FillDirection fillDir) { | |
initLinePaint(lineColor); | |
initVertexPaint(vertexColor); | |
initFillPaint(fillColor); | |
setFillDirection(fillDir); | |
this.setPointLabelFormatter(plf); | |
} | |
@Override | |
public Class<? extends SeriesRenderer> getRendererClass() { | |
return LineAndPointRenderer.class; | |
} | |
@Override | |
public SeriesRenderer getRendererInstance(XYPlot plot) { | |
return new LineAndPointRenderer(plot); | |
} | |
protected void initLinePaint(Integer lineColor) { | |
if (lineColor == null) { | |
linePaint = null; | |
} else { | |
linePaint = new Paint(); | |
linePaint.setAntiAlias(true); | |
linePaint.setStrokeWidth(PixelUtils.dpToPix(DEFAULT_LINE_STROKE_WIDTH_DP)); | |
linePaint.setColor(lineColor); | |
linePaint.setStyle(Paint.Style.STROKE); | |
} | |
} | |
protected void initVertexPaint(Integer vertexColor) { | |
if (vertexColor == null) { | |
vertexPaint = null; | |
} else { | |
vertexPaint = new Paint(); | |
vertexPaint.setAntiAlias(true); | |
vertexPaint.setStrokeWidth(PixelUtils.dpToPix(DEFAULT_VERTEX_STROKE_WIDTH_DP)); | |
vertexPaint.setColor(vertexColor); | |
vertexPaint.setStrokeCap(Paint.Cap.ROUND); | |
} | |
} | |
protected void initFillPaint(Integer fillColor) { | |
if (fillColor == null) { | |
fillPaint = null; | |
} else { | |
fillPaint = new Paint(); | |
fillPaint.setAntiAlias(true); | |
fillPaint.setColor(fillColor); | |
} | |
} | |
/** | |
* Enables the shadow layer on linePaint and shadowPaint by calling | |
* setShadowLayer() with preset values. | |
*/ | |
public void enableShadows() { | |
linePaint.setShadowLayer(1, 3, 3, Color.BLACK); | |
vertexPaint.setShadowLayer(1, 3, 3, Color.BLACK); | |
} | |
public void disableShadows() { | |
linePaint.setShadowLayer(0, 0, 0, Color.BLACK); | |
vertexPaint.setShadowLayer(0, 0, 0, Color.BLACK); | |
} | |
public Paint getLinePaint() { | |
return linePaint; | |
} | |
public void setLinePaint(Paint linePaint) { | |
this.linePaint = linePaint; | |
} | |
public Paint getVertexPaint() { | |
return vertexPaint; | |
} | |
public void setVertexPaint(Paint vertexPaint) { | |
this.vertexPaint = vertexPaint; | |
} | |
public Paint getFillPaint() { | |
return fillPaint; | |
} | |
public void setFillPaint(Paint fillPaint) { | |
this.fillPaint = fillPaint; | |
} | |
public PointLabelFormatter getPointLabelFormatter() { | |
return pointLabelFormatter; | |
} | |
public void setPointLabelFormatter(PointLabelFormatter pointLabelFormatter) { | |
this.pointLabelFormatter = pointLabelFormatter; | |
} | |
public PointLabeler getPointLabeler() { | |
return pointLabeler; | |
} | |
public void setPointLabeler(PointLabeler pointLabeler) { | |
this.pointLabeler = pointLabeler; | |
} | |
} |