@urvish-procare/react-native-charts-wrapper 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +258 -0
- package/android/build.gradle +43 -0
- package/android/src/main/AndroidManifest.xml +4 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/MPAndroidChartPackage.java +49 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/BarChartManager.java +46 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/BarLineChartBaseManager.java +415 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/BubbleChartManager.java +32 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/CandleStickChartManager.java +31 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/ChartBaseManager.java +605 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/ChartGroupHolder.java +80 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/CombinedChartManager.java +62 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/ConfigurableMinimumLinePositionFillFormatter.java +19 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/CustomFormatter.java +25 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/DateFormatter.java +34 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/HorizontalBarChartManager.java +23 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/IndexValueFormatter.java +102 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/LabelByXValueFormatter.java +25 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/LineChartManager.java +31 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/PieChartManager.java +147 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/RadarChartManager.java +118 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/ScatterChartManager.java +32 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/YAxisChartBase.java +51 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/BarDataExtract.java +106 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/BubbleDataExtract.java +74 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/CandleDataExtract.java +102 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/CombinedDataExtract.java +70 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/DataExtract.java +77 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/LineDataExtract.java +130 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/PieDataExtract.java +101 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/RadarDataExtract.java +58 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/ScatterDataExtract.java +75 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/listener/RNOnChartGestureListener.java +129 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/listener/RNOnChartValueSelectedListener.java +52 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/markers/RNCircleMarkerView.java +19 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/markers/RNRectangleMarkerView.java +134 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/BridgeUtils.java +52 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/ChartDataSetConfigUtils.java +197 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/ConversionUtil.java +144 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/DrawableUtils.java +51 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/EasingFunctionHelper.java +128 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/EntryToWritableMapUtils.java +147 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/TypefaceUtils.java +47 -0
- package/android/src/main/res/drawable-nodpi/circle_marker.xml +8 -0
- package/android/src/main/res/drawable-nodpi/oval_marker.png +0 -0
- package/android/src/main/res/drawable-nodpi/rectangle_marker.9.png +0 -0
- package/android/src/main/res/drawable-nodpi/rectangle_marker_left.9.png +0 -0
- package/android/src/main/res/drawable-nodpi/rectangle_marker_right.9.png +0 -0
- package/android/src/main/res/drawable-nodpi/rectangle_marker_top.9.png +0 -0
- package/android/src/main/res/drawable-nodpi/rectangle_marker_top_left.9.png +0 -0
- package/android/src/main/res/drawable-nodpi/rectangle_marker_top_right.9.png +0 -0
- package/android/src/main/res/layout/circle_marker.xml +13 -0
- package/android/src/main/res/layout/oval_marker.xml +24 -0
- package/android/src/main/res/layout/rectangle_marker.xml +21 -0
- package/index.js +21 -0
- package/ios/ReactNativeCharts/BalloonMarker.swift +240 -0
- package/ios/ReactNativeCharts/ChartGroupHolder.swift +70 -0
- package/ios/ReactNativeCharts/CircleMarker.swift +108 -0
- package/ios/ReactNativeCharts/ConfigurableMinimumLinePositionFillFormatter.swift +19 -0
- package/ios/ReactNativeCharts/CustomChartDateFormatter.swift +64 -0
- package/ios/ReactNativeCharts/DataExtract.swift +80 -0
- package/ios/ReactNativeCharts/IndexValueFormatter.swift +49 -0
- package/ios/ReactNativeCharts/RNBarLineChartBaseManager.swift +115 -0
- package/ios/ReactNativeCharts/RNBarLineChartManagerBridge.h +40 -0
- package/ios/ReactNativeCharts/RNBarLineChartViewBase.swift +294 -0
- package/ios/ReactNativeCharts/RNChartManagerBridge.h +36 -0
- package/ios/ReactNativeCharts/RNChartViewBase.swift +593 -0
- package/ios/ReactNativeCharts/RNCharts-Bridging-Header.h +9 -0
- package/ios/ReactNativeCharts/RNYAxisChartManagerBridge.h +17 -0
- package/ios/ReactNativeCharts/RNYAxisChartViewBase.swift +53 -0
- package/ios/ReactNativeCharts/ReactNativeCharts.xcodeproj/project.pbxproj +376 -0
- package/ios/ReactNativeCharts/bar/BarDataExtract.swift +89 -0
- package/ios/ReactNativeCharts/bar/RNBarChartManager.swift +53 -0
- package/ios/ReactNativeCharts/bar/RNBarChartManagerBridge.m +17 -0
- package/ios/ReactNativeCharts/bar/RNBarChartView.swift +41 -0
- package/ios/ReactNativeCharts/bar/RNBarChartViewBase.swift +27 -0
- package/ios/ReactNativeCharts/bar/RNHorizontalBarChartManager.swift +45 -0
- package/ios/ReactNativeCharts/bar/RNHorizontalBarChartManagerBridge.m +16 -0
- package/ios/ReactNativeCharts/bar/RNHorizontalBarChartView.swift +41 -0
- package/ios/ReactNativeCharts/bubble/BubbleDataExtract.swift +61 -0
- package/ios/ReactNativeCharts/bubble/RNBubbleChartManager.swift +53 -0
- package/ios/ReactNativeCharts/bubble/RNBubbleChartManagerBridge.m +15 -0
- package/ios/ReactNativeCharts/bubble/RNBubbleChartView.swift +39 -0
- package/ios/ReactNativeCharts/candlestick/CandleDataExtract.swift +101 -0
- package/ios/ReactNativeCharts/candlestick/RNCandleStickChartManager.swift +53 -0
- package/ios/ReactNativeCharts/candlestick/RNCandleStickChartManagerBridge.m +16 -0
- package/ios/ReactNativeCharts/candlestick/RNCandleStickChartView.swift +44 -0
- package/ios/ReactNativeCharts/combine/CombinedDataExtract.swift +81 -0
- package/ios/ReactNativeCharts/combine/RNCombinedChartManager.swift +53 -0
- package/ios/ReactNativeCharts/combine/RNCombinedChartManagerBridge.m +19 -0
- package/ios/ReactNativeCharts/combine/RNCombinedChartView.swift +61 -0
- package/ios/ReactNativeCharts/formatters/ChartDateFormatter.swift +38 -0
- package/ios/ReactNativeCharts/formatters/LabelByXValueFormatter.swift +35 -0
- package/ios/ReactNativeCharts/formatters/LargeValueFormatter.swift +72 -0
- package/ios/ReactNativeCharts/line/LineDataExtract.swift +178 -0
- package/ios/ReactNativeCharts/line/RNLineChartManager.swift +53 -0
- package/ios/ReactNativeCharts/line/RNLineChartManagerBridge.m +14 -0
- package/ios/ReactNativeCharts/line/RNLineChartView.swift +41 -0
- package/ios/ReactNativeCharts/pie/PieDataExtract.swift +97 -0
- package/ios/ReactNativeCharts/pie/RNPieChartManager.swift +19 -0
- package/ios/ReactNativeCharts/pie/RNPieChartManagerBridge.m +30 -0
- package/ios/ReactNativeCharts/pie/RNPieChartView.swift +192 -0
- package/ios/ReactNativeCharts/radar/RNRadarChartManager.swift +19 -0
- package/ios/ReactNativeCharts/radar/RNRadarChartManagerBridge.m +25 -0
- package/ios/ReactNativeCharts/radar/RNRadarChartView.swift +99 -0
- package/ios/ReactNativeCharts/radar/RadarDataExtract.swift +50 -0
- package/ios/ReactNativeCharts/scatter/RNScatterChartManager.swift +53 -0
- package/ios/ReactNativeCharts/scatter/RNScatterChartManagerBridge.m +15 -0
- package/ios/ReactNativeCharts/scatter/RNScatterChartView.swift +43 -0
- package/ios/ReactNativeCharts/scatter/ScatterDataExtract.swift +76 -0
- package/ios/ReactNativeCharts/utils/BridgeUtils.swift +333 -0
- package/ios/ReactNativeCharts/utils/ChartDataSetConfigUtils.swift +147 -0
- package/ios/ReactNativeCharts/utils/EntryToDictionaryUtils.swift +66 -0
- package/ios/ReactNativeCharts/utils/FontUtils.swift +29 -0
- package/ios/ReactNativeCharts/utils/HighlightUtils.swift +41 -0
- package/lib/AxisIface.js +102 -0
- package/lib/BarChart.js +43 -0
- package/lib/BarLineChartBase.js +86 -0
- package/lib/BubbleChart.js +40 -0
- package/lib/CandleStickChart.js +40 -0
- package/lib/ChartBase.js +131 -0
- package/lib/ChartDataConfig.js +263 -0
- package/lib/ChartDataSetConfig.js +80 -0
- package/lib/CombinedChart.js +43 -0
- package/lib/HighlightEnhancer.js +15 -0
- package/lib/HorizontalBarChart.js +43 -0
- package/lib/LineChart.js +39 -0
- package/lib/MoveEnhancer.js +49 -0
- package/lib/PieChart.js +64 -0
- package/lib/PieRadarChartBase.js +18 -0
- package/lib/RadarChart.js +52 -0
- package/lib/ScaleEnhancer.js +16 -0
- package/lib/ScatterChart.js +38 -0
- package/lib/ScrollEnhancer.js +15 -0
- package/package.json +40 -0
- package/react-native-charts-wrapper.podspec +26 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
package com.github.wuxudong.rncharts.data;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
4
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
5
|
+
import com.facebook.react.bridge.ReadableType;
|
|
6
|
+
import com.github.mikephil.charting.charts.Chart;
|
|
7
|
+
import com.github.mikephil.charting.data.RadarData;
|
|
8
|
+
import com.github.mikephil.charting.data.RadarDataSet;
|
|
9
|
+
import com.github.mikephil.charting.data.RadarEntry;
|
|
10
|
+
import com.github.mikephil.charting.interfaces.datasets.IDataSet;
|
|
11
|
+
import com.github.wuxudong.rncharts.utils.ChartDataSetConfigUtils;
|
|
12
|
+
import com.github.wuxudong.rncharts.utils.ConversionUtil;
|
|
13
|
+
|
|
14
|
+
import java.util.ArrayList;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Created by xudong on 02/03/2017.
|
|
18
|
+
*/
|
|
19
|
+
public class RadarDataExtract extends DataExtract<RadarData, RadarEntry> {
|
|
20
|
+
|
|
21
|
+
@Override
|
|
22
|
+
RadarData createData() {
|
|
23
|
+
return new RadarData();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@Override
|
|
27
|
+
IDataSet<RadarEntry> createDataSet(ArrayList<RadarEntry> entries, String label) {
|
|
28
|
+
return new RadarDataSet(entries, label);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@Override
|
|
32
|
+
void dataSetConfig(Chart chart, IDataSet<RadarEntry> dataSet, ReadableMap config) {
|
|
33
|
+
RadarDataSet radarDataSet = (RadarDataSet) dataSet;
|
|
34
|
+
|
|
35
|
+
ChartDataSetConfigUtils.commonConfig(chart, radarDataSet, config);
|
|
36
|
+
ChartDataSetConfigUtils.commonLineScatterCandleRadarConfig(radarDataSet, config);
|
|
37
|
+
ChartDataSetConfigUtils.commonLineRadarConfig(radarDataSet, config);
|
|
38
|
+
|
|
39
|
+
// RadarDataSet only config
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@Override
|
|
43
|
+
RadarEntry createEntry(ReadableArray values, int index) {
|
|
44
|
+
RadarEntry entry;
|
|
45
|
+
|
|
46
|
+
if (ReadableType.Map.equals(values.getType(index))) {
|
|
47
|
+
ReadableMap map = values.getMap(index);
|
|
48
|
+
float value = (float) map.getDouble("value");
|
|
49
|
+
entry = new RadarEntry(value, ConversionUtil.toMap(map));
|
|
50
|
+
} else if (ReadableType.Number.equals(values.getType(index))) {
|
|
51
|
+
entry = new RadarEntry((float) values.getDouble(index));
|
|
52
|
+
} else {
|
|
53
|
+
throw new IllegalArgumentException("Unexpected entry type: " + values.getType(index));
|
|
54
|
+
}
|
|
55
|
+
return entry;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
package com.github.wuxudong.rncharts.data;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
4
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
5
|
+
import com.facebook.react.bridge.ReadableType;
|
|
6
|
+
import com.github.mikephil.charting.charts.Chart;
|
|
7
|
+
import com.github.mikephil.charting.charts.ScatterChart;
|
|
8
|
+
import com.github.mikephil.charting.data.Entry;
|
|
9
|
+
import com.github.mikephil.charting.data.ScatterData;
|
|
10
|
+
import com.github.mikephil.charting.data.ScatterDataSet;
|
|
11
|
+
import com.github.mikephil.charting.interfaces.datasets.IDataSet;
|
|
12
|
+
import com.github.wuxudong.rncharts.utils.BridgeUtils;
|
|
13
|
+
import com.github.wuxudong.rncharts.utils.ChartDataSetConfigUtils;
|
|
14
|
+
import com.github.wuxudong.rncharts.utils.ConversionUtil;
|
|
15
|
+
|
|
16
|
+
import java.util.ArrayList;
|
|
17
|
+
import java.util.Locale;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Created by xudong on 02/03/2017.
|
|
21
|
+
*/
|
|
22
|
+
public class ScatterDataExtract extends DataExtract<ScatterData, Entry> {
|
|
23
|
+
@Override
|
|
24
|
+
ScatterData createData() {
|
|
25
|
+
return new ScatterData();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@Override
|
|
29
|
+
IDataSet<Entry> createDataSet(ArrayList<Entry> entries, String label) {
|
|
30
|
+
return new ScatterDataSet(entries, label);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@Override
|
|
34
|
+
void dataSetConfig(Chart chart, IDataSet<Entry> dataSet, ReadableMap config) {
|
|
35
|
+
ScatterDataSet scatterDataSet = (ScatterDataSet) dataSet;
|
|
36
|
+
|
|
37
|
+
ChartDataSetConfigUtils.commonConfig(chart, scatterDataSet, config);
|
|
38
|
+
ChartDataSetConfigUtils.commonBarLineScatterCandleBubbleConfig(scatterDataSet, config);
|
|
39
|
+
ChartDataSetConfigUtils.commonLineScatterCandleRadarConfig(scatterDataSet, config);
|
|
40
|
+
|
|
41
|
+
// ScatterDataSet only config
|
|
42
|
+
if (BridgeUtils.validate(config, ReadableType.Number, "scatterShapeSize")) {
|
|
43
|
+
scatterDataSet.setScatterShapeSize((float) config.getDouble("scatterShapeSize"));
|
|
44
|
+
}
|
|
45
|
+
if (BridgeUtils.validate(config, ReadableType.String, "scatterShape")) {
|
|
46
|
+
scatterDataSet.setScatterShape(ScatterChart.ScatterShape.valueOf(config.getString("scatterShape").toUpperCase(Locale.ENGLISH)));
|
|
47
|
+
}
|
|
48
|
+
if (BridgeUtils.validate(config, ReadableType.Number, "scatterShapeHoleColor")) {
|
|
49
|
+
scatterDataSet.setScatterShapeHoleColor(config.getInt("scatterShapeHoleColor"));
|
|
50
|
+
}
|
|
51
|
+
if (BridgeUtils.validate(config, ReadableType.Number, "scatterShapeHoleRadius")) {
|
|
52
|
+
scatterDataSet.setScatterShapeHoleRadius((float) config.getDouble("scatterShapeHoleRadius"));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@Override
|
|
57
|
+
Entry createEntry(ReadableArray values, int index) {
|
|
58
|
+
float x = index;
|
|
59
|
+
|
|
60
|
+
Entry entry;
|
|
61
|
+
if (ReadableType.Map.equals(values.getType(index))) {
|
|
62
|
+
ReadableMap map = values.getMap(index);
|
|
63
|
+
if (map.hasKey("x")) {
|
|
64
|
+
x = (float) map.getDouble("x");
|
|
65
|
+
}
|
|
66
|
+
entry = new Entry(x, (float) map.getDouble("y"), ConversionUtil.toMap(map));
|
|
67
|
+
} else if (ReadableType.Number.equals(values.getType(index))) {
|
|
68
|
+
entry = new Entry(x, (float) values.getDouble(index));
|
|
69
|
+
} else {
|
|
70
|
+
throw new IllegalArgumentException("Unexpected entry type: " + values.getType(index));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return entry;
|
|
74
|
+
}
|
|
75
|
+
}
|
package/android/src/main/java/com/github/wuxudong/rncharts/listener/RNOnChartGestureListener.java
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
package com.github.wuxudong.rncharts.listener;
|
|
2
|
+
|
|
3
|
+
import androidx.annotation.NonNull;
|
|
4
|
+
import android.view.MotionEvent;
|
|
5
|
+
|
|
6
|
+
import com.facebook.react.bridge.Arguments;
|
|
7
|
+
import com.facebook.react.bridge.ReactContext;
|
|
8
|
+
import com.facebook.react.bridge.WritableMap;
|
|
9
|
+
import com.facebook.react.uimanager.events.RCTEventEmitter;
|
|
10
|
+
import com.github.mikephil.charting.charts.BarLineChartBase;
|
|
11
|
+
import com.github.mikephil.charting.charts.Chart;
|
|
12
|
+
import com.github.mikephil.charting.components.YAxis;
|
|
13
|
+
import com.github.mikephil.charting.listener.ChartTouchListener;
|
|
14
|
+
import com.github.mikephil.charting.listener.OnChartGestureListener;
|
|
15
|
+
import com.github.mikephil.charting.utils.MPPointD;
|
|
16
|
+
import com.github.mikephil.charting.utils.ViewPortHandler;
|
|
17
|
+
import com.github.wuxudong.rncharts.charts.ChartGroupHolder;
|
|
18
|
+
|
|
19
|
+
import java.lang.ref.WeakReference;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Created by xudong on 07/03/2017.
|
|
23
|
+
*/
|
|
24
|
+
public class RNOnChartGestureListener implements OnChartGestureListener {
|
|
25
|
+
|
|
26
|
+
private WeakReference<Chart> mWeakChart;
|
|
27
|
+
|
|
28
|
+
private String group = null;
|
|
29
|
+
|
|
30
|
+
private String identifier = null;
|
|
31
|
+
|
|
32
|
+
public RNOnChartGestureListener(Chart chart) {
|
|
33
|
+
this.mWeakChart = new WeakReference<>(chart);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public void setGroup(String group) {
|
|
37
|
+
this.group = group;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public void setIdentifier(String identifier) {
|
|
41
|
+
this.identifier = identifier;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@Override
|
|
45
|
+
public void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
|
|
46
|
+
sendEvent("chartGestureStart", me);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@Override
|
|
50
|
+
public void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
|
|
51
|
+
sendEvent("chartGestureEnd", me);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@Override
|
|
55
|
+
public void onChartLongPressed(MotionEvent me) {
|
|
56
|
+
sendEvent("chartLongPress", me);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@Override
|
|
60
|
+
public void onChartDoubleTapped(MotionEvent me) {
|
|
61
|
+
sendEvent("doubleTapped", me);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@Override
|
|
65
|
+
public void onChartSingleTapped(MotionEvent me) {
|
|
66
|
+
sendEvent("chartSingleTap", me);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@Override
|
|
70
|
+
public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {
|
|
71
|
+
sendEvent("chartFling", me1);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@Override
|
|
75
|
+
public void onChartScale(MotionEvent me, float scaleX, float scaleY) {
|
|
76
|
+
sendEvent("chartScaled", me);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@Override
|
|
80
|
+
public void onChartTranslate(MotionEvent me, float dX, float dY) {
|
|
81
|
+
sendEvent("chartTranslated", me);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
private void sendEvent(String action, MotionEvent me) {
|
|
85
|
+
Chart chart = mWeakChart.get();
|
|
86
|
+
if (chart != null) {
|
|
87
|
+
|
|
88
|
+
WritableMap event = getEvent(action, me, chart);
|
|
89
|
+
|
|
90
|
+
ReactContext reactContext = (ReactContext) chart.getContext();
|
|
91
|
+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
|
|
92
|
+
chart.getId(),
|
|
93
|
+
"topChange",
|
|
94
|
+
event);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@NonNull
|
|
99
|
+
private WritableMap getEvent(String action, MotionEvent me, Chart chart) {
|
|
100
|
+
WritableMap event = Arguments.createMap();
|
|
101
|
+
|
|
102
|
+
event.putString("action", action);
|
|
103
|
+
|
|
104
|
+
if (chart instanceof BarLineChartBase) {
|
|
105
|
+
BarLineChartBase barLineChart = (BarLineChartBase) chart;
|
|
106
|
+
ViewPortHandler viewPortHandler = chart.getViewPortHandler();
|
|
107
|
+
event.putDouble("scaleX", chart.getScaleX());
|
|
108
|
+
event.putDouble("scaleY", chart.getScaleY());
|
|
109
|
+
|
|
110
|
+
MPPointD center = ((BarLineChartBase) chart).getValuesByTouchPoint(viewPortHandler.getContentCenter().getX(), viewPortHandler.getContentCenter().getY(), YAxis.AxisDependency.LEFT);
|
|
111
|
+
event.putDouble("centerX", center.x);
|
|
112
|
+
event.putDouble("centerY", center.y);
|
|
113
|
+
|
|
114
|
+
MPPointD leftBottom = ((BarLineChartBase) chart).getValuesByTouchPoint(viewPortHandler.contentLeft(), viewPortHandler.contentBottom(), YAxis.AxisDependency.LEFT);
|
|
115
|
+
MPPointD rightTop = ((BarLineChartBase) chart).getValuesByTouchPoint(viewPortHandler.contentRight(), viewPortHandler.contentTop(), YAxis.AxisDependency.LEFT);
|
|
116
|
+
|
|
117
|
+
event.putDouble("left", leftBottom.x);
|
|
118
|
+
event.putDouble("bottom", leftBottom.y);
|
|
119
|
+
event.putDouble("right", rightTop.x);
|
|
120
|
+
event.putDouble("top", rightTop.y);
|
|
121
|
+
|
|
122
|
+
if (group != null && identifier != null) {
|
|
123
|
+
ChartGroupHolder.sync(group, identifier, chart.getScaleX(), chart.getScaleY(), (float) center.x, (float) center.y);
|
|
124
|
+
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return event;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
package com.github.wuxudong.rncharts.listener;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReactContext;
|
|
4
|
+
import com.facebook.react.uimanager.events.RCTEventEmitter;
|
|
5
|
+
import com.github.mikephil.charting.charts.Chart;
|
|
6
|
+
import com.github.mikephil.charting.data.Entry;
|
|
7
|
+
import com.github.mikephil.charting.highlight.Highlight;
|
|
8
|
+
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
|
|
9
|
+
import com.github.wuxudong.rncharts.utils.EntryToWritableMapUtils;
|
|
10
|
+
|
|
11
|
+
import java.lang.ref.WeakReference;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Created by xudong on 07/03/2017.
|
|
15
|
+
*/
|
|
16
|
+
public class RNOnChartValueSelectedListener implements OnChartValueSelectedListener {
|
|
17
|
+
|
|
18
|
+
private WeakReference<Chart> mWeakChart;
|
|
19
|
+
|
|
20
|
+
public RNOnChartValueSelectedListener(Chart chart) {
|
|
21
|
+
mWeakChart = new WeakReference<>(chart);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@Override
|
|
25
|
+
public void onValueSelected(Entry entry, Highlight h) {
|
|
26
|
+
|
|
27
|
+
if (mWeakChart != null) {
|
|
28
|
+
Chart chart = mWeakChart.get();
|
|
29
|
+
|
|
30
|
+
ReactContext reactContext = (ReactContext) chart.getContext();
|
|
31
|
+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
|
|
32
|
+
chart.getId(),
|
|
33
|
+
"topSelect",
|
|
34
|
+
EntryToWritableMapUtils.convertEntryToWritableMap(entry));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@Override
|
|
39
|
+
public void onNothingSelected() {
|
|
40
|
+
if (mWeakChart != null) {
|
|
41
|
+
Chart chart = mWeakChart.get();
|
|
42
|
+
|
|
43
|
+
ReactContext reactContext = (ReactContext) chart.getContext();
|
|
44
|
+
reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
|
|
45
|
+
chart.getId(),
|
|
46
|
+
"topSelect",
|
|
47
|
+
null);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
package com.github.wuxudong.rncharts.markers;
|
|
2
|
+
|
|
3
|
+
import com.github.mikephil.charting.components.MarkerView;
|
|
4
|
+
import android.content.Context;
|
|
5
|
+
|
|
6
|
+
import com.github.mikephil.charting.utils.MPPointF;
|
|
7
|
+
import com.github.wuxudong.rncharts.R;
|
|
8
|
+
|
|
9
|
+
public class RNCircleMarkerView extends MarkerView {
|
|
10
|
+
public RNCircleMarkerView(Context context) {
|
|
11
|
+
//the super will take care of displaying the layout
|
|
12
|
+
super(context, R.layout.circle_marker);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@Override
|
|
16
|
+
public MPPointF getOffset() {
|
|
17
|
+
return new MPPointF(-(getWidth() / 2), -getHeight() / 2);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
package com.github.wuxudong.rncharts.markers;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import android.graphics.drawable.Drawable;
|
|
5
|
+
import androidx.core.content.res.ResourcesCompat;
|
|
6
|
+
import android.text.TextUtils;
|
|
7
|
+
import android.widget.TextView;
|
|
8
|
+
|
|
9
|
+
import com.github.mikephil.charting.charts.Chart;
|
|
10
|
+
import com.github.mikephil.charting.components.MarkerView;
|
|
11
|
+
import com.github.mikephil.charting.data.CandleEntry;
|
|
12
|
+
import com.github.mikephil.charting.data.Entry;
|
|
13
|
+
import com.github.mikephil.charting.highlight.Highlight;
|
|
14
|
+
import com.github.mikephil.charting.utils.MPPointF;
|
|
15
|
+
import com.github.mikephil.charting.utils.Utils;
|
|
16
|
+
import com.github.wuxudong.rncharts.R;
|
|
17
|
+
|
|
18
|
+
import java.util.List;
|
|
19
|
+
import java.util.Map;
|
|
20
|
+
|
|
21
|
+
public class RNRectangleMarkerView extends MarkerView {
|
|
22
|
+
|
|
23
|
+
private TextView tvContent;
|
|
24
|
+
|
|
25
|
+
private Drawable backgroundLeft = ResourcesCompat.getDrawable(getResources(), R.drawable.rectangle_marker_left, null);
|
|
26
|
+
private Drawable background = ResourcesCompat.getDrawable(getResources(), R.drawable.rectangle_marker, null);
|
|
27
|
+
private Drawable backgroundRight = ResourcesCompat.getDrawable(getResources(), R.drawable.rectangle_marker_right, null);
|
|
28
|
+
|
|
29
|
+
private Drawable backgroundTopLeft = ResourcesCompat.getDrawable(getResources(), R.drawable.rectangle_marker_top_left, null);
|
|
30
|
+
private Drawable backgroundTop = ResourcesCompat.getDrawable(getResources(), R.drawable.rectangle_marker_top, null);
|
|
31
|
+
private Drawable backgroundTopRight = ResourcesCompat.getDrawable(getResources(), R.drawable.rectangle_marker_top_right, null);
|
|
32
|
+
|
|
33
|
+
private int digits = 0;
|
|
34
|
+
|
|
35
|
+
public RNRectangleMarkerView(Context context) {
|
|
36
|
+
super(context, R.layout.rectangle_marker);
|
|
37
|
+
|
|
38
|
+
tvContent = (TextView) findViewById(R.id.rectangle_tvContent);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public void setDigits(int digits) {
|
|
42
|
+
this.digits = digits;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@Override
|
|
46
|
+
public void refreshContent(Entry e, Highlight highlight) {
|
|
47
|
+
String text;
|
|
48
|
+
|
|
49
|
+
if (e instanceof CandleEntry) {
|
|
50
|
+
CandleEntry ce = (CandleEntry) e;
|
|
51
|
+
text = Utils.formatNumber(ce.getClose(), digits, false);
|
|
52
|
+
} else {
|
|
53
|
+
text = Utils.formatNumber(e.getY(), digits, false);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (e.getData() instanceof Map) {
|
|
57
|
+
if (((Map) e.getData()).containsKey("marker")) {
|
|
58
|
+
|
|
59
|
+
Object marker = ((Map) e.getData()).get("marker");
|
|
60
|
+
text = marker.toString();
|
|
61
|
+
|
|
62
|
+
if (highlight.getStackIndex() != -1 && marker instanceof List) {
|
|
63
|
+
text = ((List) marker).get(highlight.getStackIndex()).toString();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (TextUtils.isEmpty(text)) {
|
|
70
|
+
tvContent.setVisibility(INVISIBLE);
|
|
71
|
+
} else {
|
|
72
|
+
tvContent.setText(text);
|
|
73
|
+
tvContent.setVisibility(VISIBLE);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
super.refreshContent(e, highlight);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@Override
|
|
80
|
+
public MPPointF getOffset() {
|
|
81
|
+
return new MPPointF(-(getWidth() / 2), -getHeight());
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@Override
|
|
85
|
+
public MPPointF getOffsetForDrawingAtPoint(float posX, float posY) {
|
|
86
|
+
|
|
87
|
+
MPPointF offset = getOffset();
|
|
88
|
+
|
|
89
|
+
MPPointF offset2 = new MPPointF();
|
|
90
|
+
|
|
91
|
+
offset2.x = offset.x;
|
|
92
|
+
offset2.y = offset.y;
|
|
93
|
+
|
|
94
|
+
Chart chart = getChartView();
|
|
95
|
+
|
|
96
|
+
float width = getWidth();
|
|
97
|
+
|
|
98
|
+
if (posX + offset2.x < 0) {
|
|
99
|
+
offset2.x = 0;
|
|
100
|
+
|
|
101
|
+
if (posY + offset2.y < 0) {
|
|
102
|
+
offset2.y = 0;
|
|
103
|
+
tvContent.setBackground(backgroundTopLeft);
|
|
104
|
+
} else {
|
|
105
|
+
tvContent.setBackground(backgroundLeft);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
} else if (chart != null && posX + width + offset2.x > chart.getWidth()) {
|
|
109
|
+
offset2.x = -width;
|
|
110
|
+
|
|
111
|
+
if (posY + offset2.y < 0) {
|
|
112
|
+
offset2.y = 0;
|
|
113
|
+
tvContent.setBackground(backgroundTopRight);
|
|
114
|
+
} else {
|
|
115
|
+
tvContent.setBackground(backgroundRight);
|
|
116
|
+
}
|
|
117
|
+
} else {
|
|
118
|
+
if (posY + offset2.y < 0) {
|
|
119
|
+
offset2.y = 0;
|
|
120
|
+
tvContent.setBackground(backgroundTop);
|
|
121
|
+
} else {
|
|
122
|
+
tvContent.setBackground(background);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return offset2;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
public TextView getTvContent() {
|
|
130
|
+
return tvContent;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
package com.github.wuxudong.rncharts.utils;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
4
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
5
|
+
import com.facebook.react.bridge.ReadableType;
|
|
6
|
+
|
|
7
|
+
public class BridgeUtils {
|
|
8
|
+
|
|
9
|
+
public static boolean validate(ReadableMap map, ReadableType propType, String propName) {
|
|
10
|
+
return map.hasKey(propName) && propType.equals(map.getType(propName));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public static int[] convertToIntArray(ReadableArray readableArray) {
|
|
14
|
+
int[] array = new int[readableArray.size()];
|
|
15
|
+
|
|
16
|
+
for (int i = 0; i < readableArray.size(); i++) {
|
|
17
|
+
if (!ReadableType.Number.equals(readableArray.getType(i))) {
|
|
18
|
+
throw new IllegalArgumentException("Expecting array of numbers");
|
|
19
|
+
}
|
|
20
|
+
array[i] = readableArray.getInt(i);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return array;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public static float[] convertToFloatArray(ReadableArray readableArray) {
|
|
27
|
+
float[] array = new float[readableArray.size()];
|
|
28
|
+
|
|
29
|
+
for (int i = 0; i < readableArray.size(); i++) {
|
|
30
|
+
if (!ReadableType.Number.equals(readableArray.getType(i))) {
|
|
31
|
+
throw new IllegalArgumentException("Expecting array of numbers");
|
|
32
|
+
}
|
|
33
|
+
array[i] = (float) readableArray.getDouble(i);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return array;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public static String[] convertToStringArray(ReadableArray readableArray) {
|
|
40
|
+
String[] array = new String[readableArray.size()];
|
|
41
|
+
|
|
42
|
+
for (int i = 0; i < readableArray.size(); i++) {
|
|
43
|
+
if (!ReadableType.String.equals(readableArray.getType(i))) {
|
|
44
|
+
throw new IllegalArgumentException("Expecting array of strings");
|
|
45
|
+
}
|
|
46
|
+
array[i] = readableArray.getString(i);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return array;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
}
|