Android Chart - Examples
SciChart Android ships with ~90 Android Chart Examples which you can browse, play with, view the source-code and even export each SciChart Android Chart Example to a stand-alone Android Studio project. All of this is possible with the new and improved SciChart Android Examples Suite, which ships as part of our Android Charts SDK.
You can control which axes a modifier affects using the includeAxis API. By default, all axes are included, so modifiers work on all axes unless you configure otherwise.
You can do this by using the includedXAxes, includedYAxes and includeAllAxes methods on the modifier, which provide methods to include or exclude specific axes.
val xAxis = NumericAxis(this)
val zoomPanModifier = ZoomPanModifier()
// below code excludes the provided axis
zoomPanModifier.includeXAxis(xAxis, false)For cursor and rollover modifiers, you can control which renderable series the modifier affects using the includeRenderableSeries() method.
val cursorModifier = CursorModifier()
val series = FastLineRenderableSeries()
// below code excludes the provided series
cursorModifier.includeRenderableSeries(series, false)The full source code for the Android IncludeAxis API implementation example is included below (Scroll down!).
Did you know you can also view the source code from one of the following sources as well?
- Clone the SciChart.Android.Examples from GitHub.
- Or, view source and export each example to an Android Studio project from the Java version of the SciChart Android Examples app.
- Also the SciChart Android Trial contains the full source for the examples (link below).
IncludeAxisModifiersFragment.java
View source code//******************************************************************************
// SCICHART® Copyright SciChart Ltd. 2011-2025. All rights reserved.
//
// Web: http://www.scichart.com
// Support: support@scichart.com
// Sales: sales@scichart.com
//
// IncludeAxisModifiersFragment.java is part of SCICHART®, High Performance Scientific Charts
// For full terms and conditions of the license, see http://www.scichart.com/scichart-eula/
//
// This source code is protected by international copyright law. Unauthorized
// reproduction, reverse-engineering, or distribution of all or any portion of
// this source code is strictly prohibited.
//
// This source code contains confidential and proprietary trade secrets of
// SciChart Ltd., and should at no time be copied, transferred, sold,
// distributed or made available without express written permission.
//******************************************************************************
package com.scichart.examples.fragments.examples2d.modifyAxisBehavior;
import android.os.Handler;
import androidx.annotation.NonNull;
import com.scichart.charting.model.dataSeries.IXyDataSeries;
import com.scichart.charting.modifiers.CursorModifier;
import com.scichart.charting.modifiers.PinchZoomModifier;
import com.scichart.charting.modifiers.RolloverModifier;
import com.scichart.charting.modifiers.XAxisDragModifier;
import com.scichart.charting.modifiers.YAxisDragModifier;
import com.scichart.charting.modifiers.ZoomExtentsModifier;
import com.scichart.charting.modifiers.ZoomPanModifier;
import com.scichart.charting.visuals.SciChartSurface;
import com.scichart.charting.visuals.axes.AxisAlignment;
import com.scichart.charting.visuals.axes.IAxis;
import com.scichart.charting.visuals.renderableSeries.FastLineRenderableSeries;
import com.scichart.core.framework.UpdateSuspender;
import com.scichart.drawing.utility.ColorUtil;
import com.scichart.examples.R;
import com.scichart.examples.data.DataManager;
import com.scichart.examples.data.DoubleSeries;
import com.scichart.examples.fragments.base.ExampleSingleChartBaseFragment;
import com.scichart.examples.utils.Constant;
import com.scichart.examples.utils.interpolator.DefaultInterpolator;
import java.util.Collections;
/**
* Example demonstrating the includeAxis API for modifiers.
* This example shows how to selectively apply modifiers to specific axes in a multi-axis chart.
*/
public class IncludeAxisModifiersFragment extends ExampleSingleChartBaseFragment {
private static final String X_AXIS_ID = "xAxis";
private static final String Y_LEFT_AXIS_ID = "yLeftAxis";
private static final String Y_RIGHT_AXIS_ID = "yRightAxis";
@Override
public boolean showDefaultModifiersInToolbar() {
return false;
}
@Override
protected void initExample(@NonNull SciChartSurface surface) {
surface.setTheme(R.style.SciChart_NavyBlue);
// Create X Axis
final IAxis xAxis = sciChartBuilder.newNumericAxis()
.withAxisId(X_AXIS_ID)
.withAxisAlignment(AxisAlignment.Bottom)
.withAxisTitle("X Axis (Shared)")
.withGrowBy(0.1d, 0.1d)
.build();
// Create Left Y Axis
final IAxis yLeftAxis = sciChartBuilder.newNumericAxis()
.withAxisId(Y_LEFT_AXIS_ID)
.withAxisAlignment(AxisAlignment.Left)
.withAxisTitle("Left Y Axis (Not Fixed)")
.withGrowBy(0.1d, 0.1d)
.withTextColor(ColorUtil.argb(0xFF, 0x47, 0xBD, 0xE6))
.withTickLabelStyle(sciChartBuilder.newFont().withTextSize(14f).withTextColor(ColorUtil.argb(0xFF, 0x47, 0xBD, 0xE6)).build())
.build();
// Create Right Y Axis
final IAxis yRightAxis = sciChartBuilder.newNumericAxis()
.withAxisId(Y_RIGHT_AXIS_ID)
.withAxisAlignment(AxisAlignment.Right)
.withAxisTitle("Right Y Axis (Fixed)")
.withGrowBy(0.1d, 0.1d)
.withTextColor(ColorUtil.argb(0xFF, 0xAE, 0x41, 0x8D))
.withTickLabelStyle(sciChartBuilder.newFont().withTextSize(14f).withTextColor(ColorUtil.argb(0xFF, 0xAE, 0x41, 0x8D)).build())
.build();
// Create data series for left axis
final DoubleSeries leftData = DataManager.getInstance().getFourierSeries(1.0, 0.1, 5000);
final IXyDataSeries<Double, Double> leftDataSeries = sciChartBuilder.newXyDataSeries(Double.class, Double.class).build();
leftDataSeries.append(leftData.xValues, leftData.yValues);
leftDataSeries.setSeriesName("leftData");
// Create data series for right axis
final DoubleSeries rightData = DataManager.getInstance().getDampedSinewave(3.0, 0.005, 5000, 10);
final IXyDataSeries<Double, Double> rightDataSeries = sciChartBuilder.newXyDataSeries(Double.class, Double.class).build();
rightDataSeries.append(rightData.xValues, rightData.yValues);
rightDataSeries.setSeriesName("rightData");
// Create renderable series for left axis
final FastLineRenderableSeries leftSeries = sciChartBuilder.newLineSeries()
.withDataSeries(leftDataSeries)
.withXAxisId(X_AXIS_ID)
.withYAxisId(Y_LEFT_AXIS_ID)
.withStrokeStyle(ColorUtil.argb(0xFF, 0x47, 0xBD, 0xE6), 2f, true)
.build();
// Create renderable series for right axis
final FastLineRenderableSeries rightSeries = sciChartBuilder.newLineSeries()
.withDataSeries(rightDataSeries)
.withXAxisId(X_AXIS_ID)
.withYAxisId(Y_RIGHT_AXIS_ID)
.withStrokeStyle(ColorUtil.argb(0xFF, 0xAE, 0x41, 0x8D), 2f, true)
.build();
// Create ZoomPanModifier
final ZoomPanModifier zoomPanModifier = new ZoomPanModifier();
zoomPanModifier.setReceiveHandledEvents(true);
zoomPanModifier.includeYAxis(yRightAxis, false);
// Create PinchZoomModifier that ONLY works on LEFT Y AXIS
// This demonstrates selective axis inclusion
final PinchZoomModifier pinchZoomModifier = new PinchZoomModifier();
//pinchZoomModifier.includeYAxis(yLeftAxis, true); // Include only left Y axis
pinchZoomModifier.includeYAxis(yRightAxis, false); // Exclude right Y axis
pinchZoomModifier.setReceiveHandledEvents(true);
// Create Y Axis Drag Modifier that ONLY works on LEFT Y AXIS
final YAxisDragModifier yAxisDragModifier = new YAxisDragModifier();
//yAxisDragModifier.includeYAxis(yLeftAxis, true); // Include only left Y axis
yAxisDragModifier.includeYAxis(yRightAxis, false); // Include only left Y axis
// Create X Axis Drag Modifier (works on X axis by default)
final XAxisDragModifier xAxisDragModifier = new XAxisDragModifier();
// Create Zoom Extents Modifier that EXCLUDES the RIGHT Y AXIS
// This demonstrates selective axis exclusion
final ZoomExtentsModifier zoomExtentsModifier = new ZoomExtentsModifier();
final CursorModifier cursorModifier = new CursorModifier();
cursorModifier.includeRenderableSeries(
rightSeries,
false
);
UpdateSuspender.using(surface, () -> {
Collections.addAll(surface.getXAxes(), xAxis);
Collections.addAll(surface.getYAxes(), yLeftAxis, yRightAxis);
Collections.addAll(surface.getRenderableSeries(), leftSeries, rightSeries);
Collections.addAll(surface.getChartModifiers(),
zoomPanModifier,
pinchZoomModifier,
yAxisDragModifier,
xAxisDragModifier,
zoomExtentsModifier,
cursorModifier
);
// Animate the series
sciChartBuilder.newAnimator(leftSeries)
.withSweepTransformation()
.withInterpolator(DefaultInterpolator.getInterpolator())
.withDuration(Constant.ANIMATION_DURATION)
.withStartDelay(Constant.ANIMATION_START_DELAY)
.start();
sciChartBuilder.newAnimator(rightSeries)
.withSweepTransformation()
.withInterpolator(DefaultInterpolator.getInterpolator())
.withDuration(Constant.ANIMATION_DURATION)
.withStartDelay(Constant.ANIMATION_START_DELAY)
.start();
});
// Add text annotation explaining the behavior
surface.getAnnotations().add(
sciChartBuilder.newTextAnnotation()
.withText("Try pinch-zoom and Y-axis drag:\n" +
"• Left Y Axis (blue) is zoomable\n" +
"• Right Y Axis (purple) is fixed\n" +
"• Double-tap zooms only left axis")
.withX1(0.5)
.withY1(9.5)
.withFontStyle(14, ColorUtil.White)
.build()
);
}
}
IncludeAxisModifiersFragment.kt
View source code//******************************************************************************
// SCICHART® Copyright SciChart Ltd. 2011-2025. All rights reserved.
//
// Web: http://www.scichart.com
// Support: support@scichart.com
// Sales: sales@scichart.com
//
// IncludeAxisModifiersFragment.kt is part of SCICHART®, High Performance Scientific Charts
// For full terms and conditions of the license, see http://www.scichart.com/scichart-eula/
//
// This source code is protected by international copyright law. Unauthorized
// reproduction, reverse-engineering, or distribution of all or any portion of
// this source code is strictly prohibited.
//
// This source code contains confidential and proprietary trade secrets of
// SciChart Ltd., and should at no time be copied, transferred, sold,
// distributed or made available without express written permission.
//******************************************************************************
package com.scichart.examples.fragments.examples2d.modifyAxisBehavior.kt
import com.scichart.charting.visuals.SciChartSurface
import com.scichart.charting.visuals.axes.AxisAlignment.Bottom
import com.scichart.charting.visuals.axes.AxisAlignment.Left
import com.scichart.charting.visuals.axes.AxisAlignment.Right
import com.scichart.data.model.DoubleRange
import com.scichart.drawing.utility.ColorUtil
import com.scichart.examples.R
import com.scichart.examples.data.DataManager
import com.scichart.examples.fragments.base.ExampleSingleChartBaseFragment
import com.scichart.examples.utils.Constant
import com.scichart.examples.utils.interpolator.DefaultInterpolator
import com.scichart.examples.utils.scichartExtensions.SolidPenStyle
import com.scichart.examples.utils.scichartExtensions.chartModifiers
import com.scichart.examples.utils.scichartExtensions.cursorModifier
import com.scichart.examples.utils.scichartExtensions.fastLineRenderableSeries
import com.scichart.examples.utils.scichartExtensions.numericAxis
import com.scichart.examples.utils.scichartExtensions.pinchZoomModifier
import com.scichart.examples.utils.scichartExtensions.renderableSeries
import com.scichart.examples.utils.scichartExtensions.setTextColor
import com.scichart.examples.utils.scichartExtensions.suspendUpdates
import com.scichart.examples.utils.scichartExtensions.sweepAnimation
import com.scichart.examples.utils.scichartExtensions.xAxes
import com.scichart.examples.utils.scichartExtensions.xAxisDragModifier
import com.scichart.examples.utils.scichartExtensions.xyDataSeries
import com.scichart.examples.utils.scichartExtensions.yAxes
import com.scichart.examples.utils.scichartExtensions.yAxisDragModifier
import com.scichart.examples.utils.scichartExtensions.zoomExtentsModifier
import com.scichart.examples.utils.scichartExtensions.zoomPanModifier
/**
* Example demonstrating the includeAxis API for modifiers.
* This example shows how to selectively apply modifiers to specific axes in a multi-axis chart.
*/
class IncludeAxisModifiersFragment : ExampleSingleChartBaseFragment() {
override fun showDefaultModifiersInToolbar(): Boolean = false
override fun initExample(surface: SciChartSurface) {
surface.theme = R.style.SciChart_NavyBlue
val leftData = DataManager.getInstance().getFourierSeries(1.0, 0.1, 5000)
val rightData = DataManager.getInstance().getDampedSinewave(3.0, 0.005, 5000, 10)
val leftColor = ColorUtil.argb(0xFF, 0x47, 0xBD, 0xE6)
val rightColor = ColorUtil.argb(0xFF, 0xAE, 0x41, 0x8D)
surface.suspendUpdates {
xAxes {
numericAxis {
axisId = X_AXIS_ID
axisAlignment = Bottom
axisTitle = "X Axis (Shared)"
growBy = DoubleRange(0.1, 0.1)
}
}
yAxes {
numericAxis {
axisId = Y_LEFT_AXIS_ID
axisAlignment = Left
axisTitle = "Left Y Axis (Not Fixed)"
growBy = DoubleRange(0.1, 0.1)
tickLabelStyle = sciChartBuilder.newFont().withTextSize(14f)
.withTextColor(ColorUtil.argb(0xFF, 0x47, 0xBD, 0xE6)).build()
setTextColor(leftColor.toLong())
}
numericAxis {
axisId = Y_RIGHT_AXIS_ID
axisAlignment = Right
axisTitle = "Right Y Axis (Fixed)"
growBy = DoubleRange(0.1, 0.1)
tickLabelStyle = sciChartBuilder.newFont().withTextSize(14f)
.withTextColor(ColorUtil.argb(0xFF, 0xAE, 0x41, 0x8D)).build()
setTextColor(rightColor.toLong())
}
}
renderableSeries {
fastLineRenderableSeries {
xAxisId = X_AXIS_ID
yAxisId = Y_LEFT_AXIS_ID
strokeStyle = SolidPenStyle(leftColor, 2f)
xyDataSeries<Double, Double> {
append(leftData.xValues, leftData.yValues)
seriesName = "leftData"
}
sweepAnimation {
duration = Constant.ANIMATION_DURATION
startDelay = Constant.ANIMATION_START_DELAY
interpolator = DefaultInterpolator.getInterpolator()
}
}
fastLineRenderableSeries {
xAxisId = X_AXIS_ID
yAxisId = Y_RIGHT_AXIS_ID
strokeStyle = SolidPenStyle(rightColor, 2f)
xyDataSeries<Double, Double> {
append(rightData.xValues, rightData.yValues)
seriesName = "rightData"
}
sweepAnimation {
duration = Constant.ANIMATION_DURATION
startDelay = Constant.ANIMATION_START_DELAY
interpolator = DefaultInterpolator.getInterpolator()
}
}
}
chartModifiers {
// ZoomPanModifier
zoomPanModifier {
receiveHandledEvents = true
includeYAxis(surface.yAxes.first { it.axisId == Y_RIGHT_AXIS_ID }, false)
}
// PinchZoomModifier ONLY works on LEFT Y AXIS
// This demonstrates selective axis inclusion
pinchZoomModifier {
receiveHandledEvents = true
// Include only the left Y axis
includeYAxis(surface.yAxes.first { it.axisId == Y_LEFT_AXIS_ID }, true)
}
// Y Axis Drag Modifier that ONLY works on LEFT Y AXIS
yAxisDragModifier {
// Include only the left Y axis
includeYAxis(surface.yAxes.first { it.axisId == Y_LEFT_AXIS_ID }, true)
}
// X Axis Drag Modifier (works on X axis by default)
xAxisDragModifier()
// Zoom Extents Modifier that EXCLUDES the RIGHT Y AXIS
// This demonstrates selective axis exclusion
zoomExtentsModifier()
cursorModifier {
includeRenderableSeries(
surface.renderableSeries.first { it.yAxisId == Y_RIGHT_AXIS_ID },
false
)
}
}
// Note: Annotations would be added here but require additional setup in Kotlin DSL
}
}
companion object {
private const val X_AXIS_ID = "xAxis"
private const val Y_LEFT_AXIS_ID = "yLeftAxis"
private const val Y_RIGHT_AXIS_ID = "yRightAxis"
}
}
Back to Android Chart Examples


