我正在开发 android 应用程序,我从压力传感器(连接到 arduino)接收数据并希望在 scichart 热图中显示它。我使用 IPaletteProvider 成功创建了 scichart 热图。现在我想用压力传感器更新热图,但目前我无法更新我的热图。这是我的整体(PressureActivity 代码)。
public class PressureSensorActivity extends AppCompatActivity {
private String TAG="PressureSensorActivity";
private BluetoothAdapter mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
// private HeatMap heatMap;
private TextView pressureTextView;
private SciChartSurface chart;
private static final int WIDTH = 300, HEIGHT = 200;
private FastUniformHeatmapRenderableSeries heatmapRenderableSeries;
private BroadcastReceiver mReceiver=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Constants.DATA)) {
String data = intent.getStringExtra("DATA");
if (data.contains("ccccc")) {
Log.d("DATA contain weight tag", data);
int index = data.indexOf('/');
int indexx = data.indexOf('#');
String d = data.substring((index + 1), indexx);
Log.d(TAG + "Reduce data", d);
pressureTextView.setText(Integer.parseInt(d)+" psi");
DoubleValues doubleValues=new DoubleValues(1);
doubleValues.add(Double.parseDouble(d));
dataSeries.updateZValues(doubleValues);
}
}
else if (intent.getAction().equals(Constants.DISCONNECTED)) {
Toast.makeText(PressureSensorActivity.this, "Disconnected...", Toast.LENGTH_SHORT).show();
startActivity(new Intent(PressureSensorActivity.this, MainActivity.class));
PressureSensorActivity.this.finish();
}
}
};
private final UniformHeatmapDataSeries<Integer, Integer, Double> dataSeries =
new UniformHeatmapDataSeries<>(Integer.class, Integer.class, Double.class, WIDTH, HEIGHT);
// private SciChartBuilder sciChartBuilder = SciChartBuilder.init(this);
private final IPaletteProvider paletteProvider=new CustomUniformHeatMapProvider();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pressure_sensor);
SpannableString s = new SpannableString("Pressure Sensor");
s.setSpan(new ForegroundColorSpan(Color.BLACK), 0,"Pressure Sensor".length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
getSupportActionBar().setTitle(s);
pressureTextView=findViewById(R.id.pressure_value_text_view);
chart=findViewById(R.id.heatmap);
SciChartBuilder.init(this);
SciChartBuilder sciChartBuilder=SciChartBuilder.instance();
final NumericAxis xAxis = sciChartBuilder.newNumericAxis().build();
final NumericAxis yAxis = sciChartBuilder.newNumericAxis().build();
FastUniformHeatmapRenderableSeries heatmapRenderableSeries = sciChartBuilder.newUniformHeatmap()
.withColorMap(new ColorMap(new int[]{DarkBlue, CornflowerBlue, DarkGreen, Chartreuse, Yellow, Red}, new float[]{0f, 0.2f, 0.4f, 0.6f, 0.8f, 1}))
.withMinimum(0)
.withMaximum(200)
.withDataSeries(dataSeries)
.withPaletteProvider(paletteProvider)
.build();
SciChartHeatmapColourMap colourMap=findViewById(R.id.heatmapColourMap);
colourMap.setMinimum(heatmapRenderableSeries.getMinimum());
colourMap.setMaximum(heatmapRenderableSeries.getMaximum());
colourMap.setColorMap(heatmapRenderableSeries.getColorMap());
Collections.addAll(chart.getXAxes(), xAxis);
Collections.addAll(chart.getYAxes(), yAxis);
Collections.addAll(chart.getRenderableSeries(), heatmapRenderableSeries);
ModifierGroup modifiers = sciChartBuilder.newModifierGroupWithDefaultModifiers()
.withCursorModifier().withShowTooltip(true).withReceiveHandledEvents(true).build()
.build();
Collections.addAll(chart.getChartModifiers(), modifiers);
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver,new IntentFilter(Constants.DISCONNECTED));
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver,new IntentFilter(Constants.DATA));
}
@Override
protected void onDestroy() {
super.onDestroy();
LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
this.finish();
}
private class CustomUniformHeatMapProvider extends PaletteProviderBase<FastUniformHeatmapRenderableSeries> implements IUniformHeatmapPaletteProvider {
private double thresholdValue;
public CustomUniformHeatMapProvider()
{
super(FastUniformHeatmapRenderableSeries.class);
}
public void setThresholdValue(double thresholdValue) {
this.thresholdValue = thresholdValue;
if(renderableSeries != null)
renderableSeries.invalidateElement();
}
@Override
public boolean shouldSetColors() {
return false;
}
@Override
public void update() {
final FastUniformHeatmapRenderableSeries renderableSeries = this.renderableSeries;
final UniformHeatmapRenderPassData currentRenderPassData = (UniformHeatmapRenderPassData) renderableSeries.getCurrentRenderPassData();
final DoubleValues zValues = currentRenderPassData.zValues;
final IntegerValues zColors = currentRenderPassData.zColors;
final int size = zValues.size();
zColors.setSize(size);
// working with array is much faster than calling set() many times
final double[] zValuesArray = zValues.getItemsArray();
final int[] zColorsArray = zColors.getItemsArray();
for (int zIndex = 0; zIndex < size; zIndex++) {
final double value = zValuesArray[zIndex];
Log.d(TAG+" zValuesArray",String.valueOf(value));
Log.d(TAG+" zColorsArray",String.valueOf(zColorsArray[zIndex]));
zColorsArray[zIndex] = value > thresholdValue ? Color.BLACK : Color.BLUE;
}
}
}
}
这是生成的我的热图图表,但我无法通过 ZValues 更新它。任何人有任何想法请帮助我。在此先感谢。