Creating the project
<
Page
loaded
=
"onPageLoaded"
xmlns
=
"http://www.nativescript.org/tns.xsd"
>
<
GridLayout
margin
=
"20"
columns
=
"auto, *"
>
<
StackLayout
orientation
=
"vertical"
dock
=
"top"
>
<
Button
id
=
"Start"
tap
=
"tapStart"
text
=
"Start"
/>
<
Button
id
=
"Stop"
tap
=
"tapStop"
text
=
"Stop"
/>
<
Button
id
=
"Reset"
tap
=
"tapReset"
text
=
"Reset"
/>
</
StackLayout
>
<
Placeholder
creatingView
=
"creatingChart"
col
=
"1"
/>
</
GridLayout
>
</
Page
>
var
chart;
function
creatingChart(args) {
chart = TKChart.
new
();
args.view = chart;
}
exports.creatingChart = creatingChart;
var
motionManager =
new
CMMotionManager();
function
onPageLoaded(args) {
motionManager.accelerometerUpdateInterval = 0.2;
startOperations();
}
exports.onPageLoaded = onPageLoaded;
var
coefficient = 1000;
function
startOperations() {
if
(motionManager.accelerometerAvailable)
{
motionManager.startAccelerometerUpdatesToQueueWithHandler(NSOperationQueue.currentQueue(),
function
(accelerometerData, error) {
var
acceleration = accelerometerData.acceleration;
buildChartWithPoints(acceleration.x*coefficient);
}
);
}
}
exports.startOperations = startOperations;
var
dataPoints = [];
function
buildChartWithPoints(point) {
//implementation here
}
chart.removeAllData();
chart.removeAllAnnotations();
var
dataPoint = TKChartDataPoint.alloc().initWithXY(NSDate.date(), point);
dataPoints.push(dataPoint);
if
(dataPoints.length > 25) {
dataPoints.shift();
}
var
yAxis = TKChartNumericAxis.alloc().initWithMinimumAndMaximum(-coefficient, coefficient);
yAxis.position = TKChartAxisPosition.Left;
yAxis.majorTickInterval = 200;
yAxis.minorTickInterval = 1;
yAxis.offset = 0;
yAxis.baseline = 0;
yAxis.style.labelStyle.fitMode = TKChartAxisLabelFitMode.Rotate;
yAxis.style.labelStyle.firstLabelTextAlignment = TKChartAxisLabelAlignment.Left;
chart.yAxis = yAxis;
var
lineSeries = TKChartLineSeries.alloc().initWithItems(dataPoints);
lineSeries.style.palette =
new
TKChartPalette();
var
strokeRed = TKStroke.strokeWithColor(UIColor.colorWithRedGreenBlueAlpha(1, 0, 0, 1));
strokeRed.width = 1.5;
lineSeries.style.palette.addPaletteItem(TKChartPaletteItem.paletteItemWithDrawables([strokeRed]));
chart.addSeries(lineSeries);
var
axisColor = TKStroke.strokeWithColor(UIColor.blackColor());
axisColor.width = 1;
chart.xAxis.style.lineStroke = axisColor;
chart.xAxis.style.majorTickStyle.ticksHidden =
true
;
chart.xAxis.style.labelStyle.textHidden =
true
;
var
annotationBandRed = TKChartBandAnnotation.alloc().initWithRangeForAxis(TKRange.alloc().initWithMinimumAndMaximum(-1000, 1000), chart.yAxis);
annotationBandRed.style.fill = TKSolidFill.solidFillWithColor(UIColor.colorWithRedGreenBlueAlpha(255/255.0, 149/255.0, 149/255.0, 0.7));
chart.addAnnotation(annotationBandRed);
var
annotationBandYellow = TKChartBandAnnotation.alloc().initWithRangeForAxis(TKRange.alloc().initWithMinimumAndMaximum(-500, 500), chart.yAxis);
annotationBandYellow.style.fill = TKSolidFill.solidFillWithColor(UIColor.colorWithRedGreenBlueAlpha(252/255.0, 255/255.0, 138/255.0, 0.7));
chart.addAnnotation(annotationBandYellow);
var
annotationBandGreen = TKChartBandAnnotation.alloc().initWithRangeForAxis(TKRange.alloc().initWithMinimumAndMaximum(-300, 300), chart.yAxis);
annotationBandGreen.style.fill = TKSolidFill.solidFillWithColor(UIColor.colorWithRedGreenBlueAlpha(152/255.0, 255/255.0, 149/255.0, 1));
chart.addAnnotation(annotationBandGreen);
var
dashStroke = TKStroke.strokeWithColor(UIColor.colorWithRedGreenBlueAlpha(0, 0, 0, 0.5));
dashStroke.dashPattern = ([6, 1]);
dashStroke.width = 0.5;
var
positiveDashAnnotation = TKChartGridLineAnnotation.alloc().initWithValueForAxis(150, chart.yAxis);
positiveDashAnnotation.style.stroke = dashStroke;
chart.addAnnotation(positiveDashAnnotation);
var
negativeDashAnnotation = TKChartGridLineAnnotation.alloc().initWithValueForAxis(-150, chart.yAxis);
negativeDashAnnotation.style.stroke = dashStroke;
chart.addAnnotation(negativeDashAnnotation)
if
(dataPoints.length > 1) {
var
needle = NeedleAnnotation.alloc().initWithXYForSeries(dataPoint.dataXValue, dataPoint.dataYValue, lineSeries);
needle.zPosition = TKChartAnnotationZPosition.AboveSeries;
chart.addAnnotation(needle);
}
var
NeedleAnnotation = TKChartPointAnnotation.extend({
layoutInRect:
function
(bounds)
{
var
xval =
this
.series.xAxis.numericValue(
this
.position.dataXValue);
var
x = TKChartSeriesRender.locationOfValueForAxisInRect(xval,
this
.series.xAxis, bounds);
var
yval =
this
.series.yAxis.numericValue(
this
.position.dataYValue);
var
y = TKChartSeriesRender.locationOfValueForAxisInRect(yval,
this
.series.yAxis, bounds);
center = CGPointMake(x, y);
},
drawInContext:
function
(context)
{
CGContextBeginPath(context);
CGContextMoveToPoint(context, center.x-20, center.y);
CGContextAddLineToPoint(context, center.x+20, center.y+20);
CGContextAddLineToPoint(context, center.x+20, center.y-20);
CGContextSetRGBFillColor(context, 0, 0, 0, 1);
CGContextFillPath(context);
}
});
exports.NeedleAnnotation = NeedleAnnotation;
var
needleAnnotation = require(
"./needle-annotation"
);
var
NeedleAnnotation = needleAnnotation.NeedleAnnotation;
function
tapStart() {
startOperations();
}
function
tapStop() {
motionManager.stopAccelerometerUpdates();
NSOperationQueue.currentQueue().cancelAllOperations();
}
function
tapReset() {
chart.removeAllData();
while
(dataPoints.length > 0)
{
dataPoints.pop();
}
buildChartWithPoints(0);
}
exports.tapStart = tapStart;
exports.tapStop = tapStop;
exports.tapReset = tapReset;
button {
font-size: 20;
background-color: gray;
color:
#3BB9FF;
margin: 10;
}