studio example ejemplo developer chart bar android graph charts mpandroidchart

example - mpandroidchart jar



MPAndroidChart: haga que un gráfico refleje el zoom/toques en un gráfico hermano (1)

Se pueden hacer acercamientos con la versión actual de MPAndroidChart, para desplazarse hacia afuera o esperar a que se fusione mi extensión: https://github.com/PhilJay/MPAndroidChart/pull/545

Necesita configurar un OnChartGestureListener en el gráfico maestro que copie los valores de la matriz de traducción a los gráficos esclavos:

public class CoupleChartGestureListener implements OnChartGestureListener { private Chart srcChart; private Chart[] dstCharts; public CoupleChartGestureListener(Chart srcChart, Chart[] dstCharts) { this.srcChart = srcChart; this.dstCharts = dstCharts; } [...other overrides...] @Override public void onChartScale(MotionEvent me, float scaleX, float scaleY) { //Log.d(TAG, "onChartScale " + scaleX + "/" + scaleY + " X=" + me.getX() + "Y=" + me.getY()); syncCharts(); } @Override public void onChartTranslate(MotionEvent me, float dX, float dY) { //Log.d(TAG, "onChartTranslate " + dX + "/" + dY + " X=" + me.getX() + "Y=" + me.getY()); syncCharts(); } public void syncCharts() { Matrix srcMatrix; float[] srcVals = new float[9]; Matrix dstMatrix; float[] dstVals = new float[9]; // get src chart translation matrix: srcMatrix = srcChart.getViewPortHandler().getMatrixTouch(); srcMatrix.getValues(srcVals); // apply X axis scaling and position to dst charts: for (Chart dstChart : dstCharts) { if (dstChart.getVisibility() == View.VISIBLE) { dstMatrix = dstChart.getViewPortHandler().getMatrixTouch(); dstMatrix.getValues(dstVals); dstVals[Matrix.MSCALE_X] = srcVals[Matrix.MSCALE_X]; dstVals[Matrix.MTRANS_X] = srcVals[Matrix.MTRANS_X]; dstMatrix.setValues(dstVals); dstChart.getViewPortHandler().refresh(dstMatrix, dstChart, true); } } } }

Luego configure sus conexiones maestro / esclavo, por ejemplo, de esta manera:

// // Couple chart viewports: // tripChart.setOnChartGestureListener(new CoupleChartGestureListener( tripChart, new Chart[] { powerChart, energyChart })); powerChart.setOnChartGestureListener(new CoupleChartGestureListener( powerChart, new Chart[] { tripChart, energyChart })); energyChart.setOnChartGestureListener(new CoupleChartGestureListener( energyChart, new Chart[] { tripChart, powerChart }));

Tengo dos gráficos de líneas que muestran datos complementarios durante el mismo período de tiempo. ¿Hay alguna forma de enviar eventos táctiles recibidos por un gráfico al otro? Básicamente lo quiero para que los gráficos siempre muestren el mismo rectángulo de visualización (al menos horizontalmente). Por lo tanto, si un usuario desliza las unidades ''n'' izquierda en el gráfico superior, el gráfico inferior se desplazará automáticamente hacia la izquierda ''n'' unidades para que coincida.