Estilo de punto personalizado del motor Achar en android

Hi I want to draw custom point style in scattered chart in achartengine. enter image description here

Is it possible using achartengine?? If yes then how to do this?

preguntado el 28 de mayo de 14 a las 12:05

2 Respuestas

I was able to use custom point style by overriding onDraw(Canvas canvas) method of graphical view

 protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (mCommonPointBitmap != null ) {
        float halfWitdhCommonPointBitmap = (float) mCommonPointBitmap.getWidth() / 2;
        float halfHeightCommonPointBitmap = (float) mCommonPointBitmap.getHeight() / 2;
        // float halfWitdhyouPointBitmap = (float) mYouPointBitmap.getWidth() / 2;
        // float halfHeightyouPointBitmap = (float) mYouPointBitmap.getHeight() / 2;
        List<double[]> screenPoints = getSeriesSelectionList();
        if (!CommonUtils.isCollectionNullOrEmpty(screenPoints)) {
            int[] margins = mXYChart.getRenderer().getMargins();
            // Info: margin order: top, left, bottom, right
            canvas.clipRect(getLeft() + margins[1], getTop() - margins[0], getRight() - margins[3], getBottom()
                    - margins[2]);
            for (int i = 0; i < screenPoints.size(); i++) {
                double[] screenPoint = screenPoints.get(i);
                if (screenPoint != null) {
                    float pointLeftX = (float) screenPoint[0] - halfWitdhCommonPointBitmap;
                    float pointTopY = (float) screenPoint[1] - halfHeightCommonPointBitmap;
                    canvas.drawBitmap(mCommonPointBitmap, pointLeftX, pointTopY, null);
                }
            }
        }
    }
}



 List<double[]> screenPoints = null;
    XYSeries xySeries = mXYChart.getDataset().getSeriesAt(0);
    int itemCount = xySeries.getItemCount();
    if (itemCount > 0) {
        screenPoints = new ArrayList<double[]>(itemCount);
        double[] realPoints = new double[2];
        for (int itemIndex = 0; itemIndex < itemCount; itemIndex++) {
            realPoints[0] = xySeries.getX(itemIndex);
            realPoints[1] = xySeries.getY(itemIndex);
            screenPoints.add(mXYChart.toScreenPoint(realPoints));
        }
    }
    return screenPoints;
}

contestado el 29 de mayo de 14 a las 07:05

A somewhat simpler solution in my opinion would be by subclassing the Scatterchart for example, and then Overriding its draw series method

Algo como esto:

public class BitmapChart extends ScatterChart{

public Bitmap awesomeBitmap; 
private static final long serialVersionUID = 1L;

public BitmapChart(XYMultipleSeriesDataset dataset,
        XYMultipleSeriesRenderer renderer, Context context) {
    super(dataset, renderer);
    awesomeBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.my_awesome_bitmap_resource);
}

@Override
public void drawSeries(Canvas canvas, Paint paint, List<Float> points,
        SimpleSeriesRenderer renderer, float yAxisValue, int seriesIndex, int startIndex) {
    int length = points.size();
    for (int i = 0; i < length; i += 2) {
        canvas.drawBitmap(awesomeBitmap, points.get(i), points.get(i+1), paint);
    }
}

}

Entonces puedes usarlo así:

    BitmapChart chart = new BitmapChart(yourDataset,yourChartRenderer,thisContext);
    yourChartView = new GraphicalView(thisContext, chart);

Respondido 08 Oct 14, 15:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.