AndroidLot自定义关节

AndroidLot自定义关节,android,androidplot,Android,Androidplot,我目前试图让我的情节看起来像这样: 但我不知道如何自定义点,使其在橙色填充周围具有黑色笔划,因此我的点现在“粘”到线条上 或者,至少是如何使它看起来像这样(外圆与直线颜色相同) 有什么帮助吗 我相信底部图像使用了自定义的LineAndPointRenderer,这也是复制最顶部图像所需的 下面是一个快速而肮脏的例子,说明了如何做到这一点。首先创建一个自定义格式化程序,该格式化程序将保存所需的新格式值: /** * A LineAndPointFormatter with

我目前试图让我的情节看起来像这样:

但我不知道如何自定义点,使其在橙色填充周围具有黑色笔划,因此我的点现在“粘”到线条上

或者,至少是如何使它看起来像这样(外圆与直线颜色相同)


有什么帮助吗

我相信底部图像使用了自定义的LineAndPointRenderer,这也是复制最顶部图像所需的

下面是一个快速而肮脏的例子,说明了如何做到这一点。首先创建一个自定义格式化程序,该格式化程序将保存所需的新格式值:

    /**
     * A LineAndPointFormatter with the addition of paint to be used to "stroke" vertices.
     */
    class MyLineAndPointFormatter extends LineAndPointFormatter{
        private Paint strokePaint;

        /**
         * Some quick and dirty hard-coded params
         */
        public MyLineAndPointFormatter() {
            super(Color.RED, Color.RED, null, null);
            strokePaint = new Paint();
            strokePaint.setColor(Color.BLACK);
            strokePaint.setStrokeWidth(PixelUtils.dpToPix(2));
            strokePaint.setStyle(Paint.Style.STROKE);
            strokePaint.setAntiAlias(true);
        }

        public Paint getStrokePaint() {
            return strokePaint;
        }

        @Override
        public Class<? extends SeriesRenderer> getRendererClass() {
            return MyLineAndPointRenderer.class;
        }

        @Override
        public SeriesRenderer getRendererInstance(XYPlot plot) {
            return new MyLineAndPointRenderer(plot);
        }
    }
下面是与SimpleXYPlot示例一起使用时的外观:


通过加粗线条、选择更好的背景色等方法,它可能会更漂亮,但你会明白这一点。

它的效果非常好。正是我需要的。非常感谢。
    /**
     * A LineAndPointRenderer that can stroke vertices.
     */
    class MyLineAndPointRenderer extends LineAndPointRenderer<MyLineAndPointFormatter> {

        public MyLineAndPointRenderer(XYPlot plot) {
            super(plot);
        }

        /**
         * Overridden draw method to get the "vertex stroke" effect.  99% of this is copy/pasted from
         * the super class' implementation. 
         * @param canvas
         * @param plotArea
         * @param series
         * @param formatter
         */
        @Override
        protected void drawSeries(Canvas canvas, RectF plotArea, XYSeries series, LineAndPointFormatter formatter) {
            PointF thisPoint;
            PointF lastPoint = null;
            PointF firstPoint = null;
            Paint  linePaint = formatter.getLinePaint();

            Path path = null;
            ArrayList<Pair<PointF, Integer>> points = new ArrayList<Pair<PointF, Integer>>(series.size());
            for (int i = 0; i < series.size(); i++) {
                Number y = series.getY(i);
                Number x = series.getX(i);

                if (y != null && x != null) {
                    thisPoint = ValPixConverter.valToPix(
                            x,
                            y,
                            plotArea,
                            getPlot().getCalculatedMinX(),
                            getPlot().getCalculatedMaxX(),
                            getPlot().getCalculatedMinY(),
                            getPlot().getCalculatedMaxY());
                    points.add(new Pair<PointF, Integer>(thisPoint, i));
                } else {
                    thisPoint = null;
                }

                if(linePaint != null && thisPoint != null) {

                    // record the first point of the new Path
                    if(firstPoint == null) {
                        path = new Path();
                        firstPoint = thisPoint;
                        // create our first point at the bottom/x position so filling
                        // will look good
                        path.moveTo(firstPoint.x, firstPoint.y);
                    }

                    if(lastPoint != null) {
                        appendToPath(path, thisPoint, lastPoint);
                    }

                    lastPoint = thisPoint;
                } else {
                    if(lastPoint != null) {
                        renderPath(canvas, plotArea, path, firstPoint, lastPoint, formatter);
                    }
                    firstPoint = null;
                    lastPoint = null;
                }
            }
            if(linePaint != null && firstPoint != null) {
                renderPath(canvas, plotArea, path, firstPoint, lastPoint, formatter);
            }

            Paint vertexPaint = formatter.getVertexPaint();
            Paint strokePaint = ((MyLineAndPointFormatter)formatter).getStrokePaint();
            PointLabelFormatter plf = formatter.getPointLabelFormatter();
            if (vertexPaint != null || plf != null) {
                for (Pair<PointF, Integer> p : points) {
                    PointLabeler pointLabeler = formatter.getPointLabeler();

                    // if vertexPaint is available, draw vertex:
                    if(vertexPaint != null) {
                        canvas.drawPoint(p.first.x, p.first.y, vertexPaint);
                    }

                    // if stroke is available, draw stroke:
                    if(strokePaint != null) {
                        // you'll probably want to make the radius a configurable parameter
                        // instead of hard-coded like it is here.
                        canvas.drawCircle(p.first.x, p.first.y, 4, strokePaint);
                    }

                    // if textPaint and pointLabeler are available, draw point's text label:
                    if(plf != null && pointLabeler != null) {
                        canvas.drawText(pointLabeler.getLabel(series, p.second), p.first.x + plf.hOffset, p.first.y + plf.vOffset, plf.getTextPaint());
                    }
                }
            }
        }
    }
MyLineAndPointFormatter format = new MyLineAndPointFormatter();
plot.addSeries(series, format);