/* | |
* 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.demos; | |
import java.util.Arrays; | |
import java.util.Iterator; | |
import android.app.Activity; | |
import android.graphics.Color; | |
import android.os.Build; | |
import android.os.Bundle; | |
import android.view.View; | |
import android.view.View.OnClickListener; | |
import android.widget.Button; | |
import com.androidplot.ui.AnchorPosition; | |
import com.androidplot.ui.DynamicTableModel; | |
import com.androidplot.ui.SizeLayoutType; | |
import com.androidplot.ui.SizeMetrics; | |
import com.androidplot.xy.LineAndPointFormatter; | |
import com.androidplot.xy.PointLabelFormatter; | |
import com.androidplot.xy.SimpleXYSeries; | |
import com.androidplot.ui.XLayoutStyle; | |
import com.androidplot.xy.XYGraphWidget; | |
import com.androidplot.xy.XYLegendWidget; | |
import com.androidplot.xy.XYPlot; | |
import com.androidplot.xy.XYSeries; | |
import com.androidplot.ui.YLayoutStyle; | |
/** | |
* The simplest possible example of using AndroidPlot to plot some data. | |
*/ | |
public class DualScaleXYPlotExampleActivity extends Activity implements OnClickListener | |
{ | |
private XYPlot myXYPlot_LEFT, myXYPlot_RIGHT; | |
private Boolean series2_onRight = true; | |
private LineAndPointFormatter series1Format, series2Format; | |
private Button button; | |
// Declare and enable buttons to toggle whether the 2nd series is on left or right. | |
// Create a couple arrays of y-values to plot: | |
private Number[] series1Numbers = {1, 8, 5, 2, 7, 4}; | |
private Number[] series2Numbers = {444, 613, 353, 876, 924, 1004}; | |
XYSeries series1, series2; | |
@Override | |
public void onCreate(Bundle savedInstanceState) | |
{ | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.dual_scale_xy_plot_example); | |
// Setup the LEFT Plot as normal | |
myXYPlot_LEFT = (XYPlot) findViewById(R.id.mySimpleXYPlot_L); | |
myXYPlot_RIGHT = (XYPlot) findViewById(R.id.mySimpleXYPlot_R); | |
// Disable Hardware Acceleration on the xyPlot view object. | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { | |
myXYPlot_LEFT.setLayerType(View.LAYER_TYPE_SOFTWARE, null); | |
myXYPlot_RIGHT.setLayerType(View.LAYER_TYPE_SOFTWARE, null); | |
} | |
XYGraphWidget graphWidget_LEFT = myXYPlot_LEFT.getGraphWidget(); | |
graphWidget_LEFT.setRangeAxisPosition(true, false, 4, "10"); | |
graphWidget_LEFT.setMarginRight(0); | |
graphWidget_LEFT.setPaddingRight(30); | |
graphWidget_LEFT.setRangeLabelVerticalOffset(-3); | |
graphWidget_LEFT.setRangeLabelWidth(50); | |
// Setup the second Plot with Right-hand Scale and otherwise invisible. | |
myXYPlot_RIGHT.getDomainLabelWidget().setVisible(false); | |
myXYPlot_RIGHT.getRangeLabelWidget().setVisible(false); | |
myXYPlot_RIGHT.getTitleWidget().setVisible(false); | |
myXYPlot_RIGHT.getBorderPaint().setAlpha(0); | |
myXYPlot_RIGHT.getBackgroundPaint().setAlpha(0); | |
XYGraphWidget graphWidget_RIGHT = myXYPlot_RIGHT.getGraphWidget(); | |
graphWidget_RIGHT.getBackgroundPaint().setAlpha(0); | |
graphWidget_RIGHT.getDomainLabelPaint().setAlpha(0); | |
graphWidget_RIGHT.getGridBackgroundPaint().setAlpha(0); | |
graphWidget_RIGHT.getDomainOriginLabelPaint().setAlpha(0); | |
graphWidget_RIGHT.getRangeOriginLinePaint().setAlpha(0); | |
graphWidget_RIGHT.getDomainGridLinePaint().setAlpha(0); | |
graphWidget_RIGHT.getRangeGridLinePaint().setAlpha(0); | |
graphWidget_RIGHT.setRangeAxisPosition(false, false, 4, "10"); | |
// Copy where possible from the LEFT plot | |
graphWidget_RIGHT.setRangeLabelVerticalOffset(graphWidget_LEFT.getRangeLabelVerticalOffset()); | |
graphWidget_RIGHT.setMarginRight(graphWidget_LEFT.getMarginRight()); | |
graphWidget_RIGHT.setPaddingRight(graphWidget_LEFT.getPaddingRight()); | |
graphWidget_RIGHT.setRangeLabelWidth(graphWidget_LEFT.getRangeLabelWidth()); | |
// Position the Graphs | |
myXYPlot_LEFT.getGraphWidget().position( | |
0 ,XLayoutStyle.ABSOLUTE_FROM_LEFT,10,YLayoutStyle.ABSOLUTE_FROM_TOP,AnchorPosition.LEFT_TOP); | |
myXYPlot_RIGHT.getGraphWidget().position( | |
49,XLayoutStyle.ABSOLUTE_FROM_LEFT,10,YLayoutStyle.ABSOLUTE_FROM_TOP,AnchorPosition.LEFT_TOP); | |
// Setup and Position the LEFT Legend | |
XYLegendWidget legendWidget_LEFT = myXYPlot_LEFT.getLegendWidget(); | |
legendWidget_LEFT.setTableModel(new DynamicTableModel(1, 3)); | |
legendWidget_LEFT.getTextPaint().setTextSize(20); | |
legendWidget_LEFT.setSize(new SizeMetrics(100, SizeLayoutType.ABSOLUTE, 75, SizeLayoutType.FILL)); | |
legendWidget_LEFT.setPadding(1, 1, 1, 1); | |
myXYPlot_LEFT.getGraphWidget().position( | |
55, XLayoutStyle.ABSOLUTE_FROM_LEFT, 15, YLayoutStyle.ABSOLUTE_FROM_TOP, AnchorPosition.LEFT_TOP); | |
// Setup and Position the RIGHT Legend | |
XYLegendWidget legendWidget_RIGHT = myXYPlot_RIGHT.getLegendWidget(); | |
legendWidget_RIGHT.setTableModel(new DynamicTableModel(1, 3)); | |
legendWidget_RIGHT.getTextPaint().setTextSize(20); | |
legendWidget_RIGHT.setSize(new SizeMetrics(100, SizeLayoutType.ABSOLUTE, 110, SizeLayoutType.ABSOLUTE)); | |
legendWidget_RIGHT.setPadding(1, 1, 1, 1); | |
myXYPlot_RIGHT.getGraphWidget().position( | |
25, XLayoutStyle.ABSOLUTE_FROM_RIGHT, 15, YLayoutStyle.ABSOLUTE_FROM_TOP, AnchorPosition.RIGHT_TOP); | |
// Setup the Series | |
series1 = new SimpleXYSeries(Arrays.asList(series1Numbers), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Series1"); | |
series2 = new SimpleXYSeries(Arrays.asList(series2Numbers), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Series2"); | |
// Setup the formatters | |
series1Format = new LineAndPointFormatter(Color.rgb(0, 200, 0), Color.rgb(0, 100, 0), null, new PointLabelFormatter(Color.WHITE)); | |
series2Format = new LineAndPointFormatter(Color.rgb(0, 0, 200), Color.rgb(0, 0, 100), null, new PointLabelFormatter(Color.WHITE)); | |
// Setup the Button | |
button = (Button)findViewById(R.id.toggleSeries2); | |
button.setOnClickListener(this); | |
} | |
@Override | |
protected void onResume() { | |
super.onResume(); | |
updateView(); | |
} | |
private void updateView() { | |
// Remove all current series from each plot | |
Iterator<XYSeries> iterator1 = myXYPlot_LEFT.getSeriesSet().iterator(); | |
while(iterator1.hasNext()) { | |
XYSeries setElement = iterator1.next(); | |
myXYPlot_LEFT.removeSeries(setElement); | |
} | |
Iterator<XYSeries> iterator2 = myXYPlot_RIGHT.getSeriesSet().iterator(); | |
while(iterator2.hasNext()) { | |
XYSeries setElement = iterator2.next(); | |
myXYPlot_RIGHT.removeSeries(setElement); | |
} | |
// Add series to each plot as needed. | |
myXYPlot_LEFT.addSeries(series1, series1Format); | |
if (series2_onRight) { | |
myXYPlot_RIGHT.addSeries(series2, series2Format); | |
} else { | |
myXYPlot_LEFT.addSeries(series2, series2Format); | |
} | |
// Finalise each Plot based on whether they have any series or not. | |
if (! myXYPlot_RIGHT.getSeriesSet().isEmpty()) { | |
myXYPlot_RIGHT.setVisibility(XYPlot.VISIBLE); | |
myXYPlot_RIGHT.redraw(); | |
} else { | |
myXYPlot_RIGHT.setVisibility(XYPlot.INVISIBLE); | |
} | |
if (! myXYPlot_LEFT.getSeriesSet().isEmpty()) { | |
myXYPlot_LEFT.setVisibility(XYPlot.VISIBLE); | |
myXYPlot_LEFT.redraw(); | |
} else { | |
myXYPlot_LEFT.setVisibility(XYPlot.INVISIBLE); | |
} | |
} | |
@Override | |
public void onClick(View v) { | |
if (series2_onRight) { | |
series2_onRight = false; | |
} else { | |
series2_onRight = true; | |
} | |
updateView(); | |
} | |
} |