Androidplot - 背景和范围

时间:2013-03-16 14:16:30

标签: android androidplot

我是那个图书馆的新手。我正在尝试创建以下图:

enter image description here

与此同时,我有下一个:

enter image description here

我的问题: 注意:颜色不重要

  1. 如何摆脱黑色区域(范围域和标题上的标签) 并使情节居中(如第一张图片)

  2. 如何在第一张图片中添加范围? (x:[1-7] y:[0-4500])

  3. 制作与第一张图片相同的网格

  4. 我的代码:

    public class MainActivity extends Activity {
    
    private XYPlot mySimpleXYPlot;
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
     // Create a couple arrays of y-values to plot:
        Number[] days =   { 1  , 2   , 3   , 4   , 5   , 6   , 7 };
        Number[] values = { 380, 1433, 1965, 3200, 3651, 3215, 3217 };
    
        // initialize our XYPlot reference:
        mySimpleXYPlot = (XYPlot) findViewById(R.id.mySimpleXYPlot);
        mySimpleXYPlot.getBackgroundPaint().setColor(Color.WHITE);
        mySimpleXYPlot.setBorderStyle(XYPlot.BorderStyle.NONE, null, null);
        mySimpleXYPlot.getGraphWidget().getBackgroundPaint().setColor(Color.WHITE);
        mySimpleXYPlot.getGraphWidget().getGridBackgroundPaint().setColor(Color.WHITE);
    
    
    
        // Domain
        mySimpleXYPlot.getGraphWidget().setDomainLabelPaint(null);
        mySimpleXYPlot.getGraphWidget().setDomainOriginLinePaint(null);
        mySimpleXYPlot.setDomainStep(XYStepMode.INCREMENT_BY_VAL, days.length);     
        mySimpleXYPlot.setDomainValueFormat(new DecimalFormat("0"));
    
    
        //Range
        mySimpleXYPlot.getGraphWidget().setRangeOriginLinePaint(null);
        mySimpleXYPlot.setRangeStep(XYStepMode.SUBDIVIDE, values.length);
        mySimpleXYPlot.setRangeValueFormat(new DecimalFormat("0"));
    
    
        //Remove legend
        mySimpleXYPlot.getLayoutManager().remove(mySimpleXYPlot.getLegendWidget());
        mySimpleXYPlot.getLayoutManager().remove(mySimpleXYPlot.getDomainLabelWidget());
        mySimpleXYPlot.getLayoutManager().remove(mySimpleXYPlot.getRangeLabelWidget());
        mySimpleXYPlot.getLayoutManager().remove(mySimpleXYPlot.getTitleWidget());
    
        // Turn the above arrays into XYSeries':
        XYSeries series1 = new SimpleXYSeries(
                Arrays.asList(days),          
                Arrays.asList(values), 
                "Series1");                             // Set the display title of the series
    
        // Create a formatter to use for drawing a series using LineAndPointRenderer:
        LineAndPointFormatter series1Format = new LineAndPointFormatter(
                Color.rgb(0, 200, 0),                   // line color
                Color.rgb(0, 100, 0),                   // point color
                Color.CYAN);                            // fill color 
    
     // setup our line fill paint to be a slightly transparent gradient:
        Paint lineFill = new Paint();
        lineFill.setAlpha(200);
        lineFill.setShader(new LinearGradient(0, 0, 0, 250, Color.WHITE, Color.GREEN, Shader.TileMode.MIRROR));
    
        series1Format.setFillPaint(lineFill);
    
        // add a new series' to the xyplot:
        mySimpleXYPlot.addSeries(series1, series1Format);
    
        // by default, AndroidPlot displays developer guides to aid in laying out your plot.
        // To get rid of them call disableAllMarkup():
        mySimpleXYPlot.disableAllMarkup();
    }
    
    }
    

4 个答案:

答案 0 :(得分:15)

我希望这有用。

我的代码:

private XYPlot mySimpleXYPlot;

@Override
public void onCreate(Bundle savedInstanceState)
{

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Create a couple arrays of y-values to plot:
    Number[] days =   { 1  , 2   , 3   , 4   , 5   , 6   , 7 };
    Number[] values = { 380, 1433, 1965, 3200, 3651, 3215, 3217 };

    // initialize our XYPlot reference:
    mySimpleXYPlot = (XYPlot) findViewById(R.id.mySimpleXYPlot);

    mySimpleXYPlot.setBorderStyle(Plot.BorderStyle.NONE, null, null);
    mySimpleXYPlot.setPlotMargins(0, 0, 0, 0);
    mySimpleXYPlot.setPlotPadding(0, 0, 0, 0);
    mySimpleXYPlot.setGridPadding(0, 10, 5, 0);

    mySimpleXYPlot.setBackgroundColor(Color.WHITE);

    mySimpleXYPlot.position(
            mySimpleXYPlot.getGraphWidget(),
            0,
            XLayoutStyle.ABSOLUTE_FROM_LEFT,
            0,
            YLayoutStyle.RELATIVE_TO_CENTER,
            AnchorPosition.LEFT_MIDDLE);

    mySimpleXYPlot.getGraphWidget().getBackgroundPaint().setColor(Color.WHITE);
    mySimpleXYPlot.getGraphWidget().getGridBackgroundPaint().setColor(Color.WHITE);

    mySimpleXYPlot.getGraphWidget().getDomainLabelPaint().setColor(Color.BLACK);
    mySimpleXYPlot.getGraphWidget().getRangeLabelPaint().setColor(Color.BLACK);

    mySimpleXYPlot.getGraphWidget().getDomainOriginLabelPaint().setColor(Color.BLACK);
    mySimpleXYPlot.getGraphWidget().getDomainOriginLinePaint().setColor(Color.BLACK);
    mySimpleXYPlot.getGraphWidget().getRangeOriginLinePaint().setColor(Color.BLACK);

    // Domain
    mySimpleXYPlot.setDomainStep(XYStepMode.INCREMENT_BY_VAL, days.length);     
    mySimpleXYPlot.setDomainValueFormat(new DecimalFormat("0"));
    mySimpleXYPlot.setDomainStepValue(1);

    //Range
    mySimpleXYPlot.setRangeBoundaries(0, 4500, BoundaryMode.FIXED);
    mySimpleXYPlot.setRangeStepValue(10);
    //mySimpleXYPlot.setRangeStep(XYStepMode.SUBDIVIDE, values.length);
    mySimpleXYPlot.setRangeValueFormat(new DecimalFormat("0"));

    //Remove legend
    mySimpleXYPlot.getLayoutManager().remove(mySimpleXYPlot.getLegendWidget());
    mySimpleXYPlot.getLayoutManager().remove(mySimpleXYPlot.getDomainLabelWidget());
    mySimpleXYPlot.getLayoutManager().remove(mySimpleXYPlot.getRangeLabelWidget());
    mySimpleXYPlot.getLayoutManager().remove(mySimpleXYPlot.getTitleWidget());

    // Turn the above arrays into XYSeries':
    XYSeries series1 = new SimpleXYSeries(
            Arrays.asList(days),          
            Arrays.asList(values), 
            "Series1");                             // Set the display title of the series

    // Create a formatter to use for drawing a series using LineAndPointRenderer:
    LineAndPointFormatter series1Format = new LineAndPointFormatter(
            Color.rgb(0, 200, 0),                   // line color
            Color.rgb(0, 100, 0),                   // point color
            Color.CYAN);                            // fill color 

 // setup our line fill paint to be a slightly transparent gradient:
    Paint lineFill = new Paint();
    lineFill.setAlpha(200);
    lineFill.setShader(new LinearGradient(0, 0, 0, 250, Color.WHITE, Color.GREEN, Shader.TileMode.MIRROR));

    series1Format.setFillPaint(lineFill);

    // add a new series' to the xyplot:
    mySimpleXYPlot.addSeries(series1, series1Format);

    // by default, AndroidPlot displays developer guides to aid in laying out your plot.
    // To get rid of them call disableAllMarkup():
    mySimpleXYPlot.disableAllMarkup();
}

}

看起来像这样:

graph

答案 1 :(得分:12)

在最新版本中,而不是使用

 mySimpleXYPlot.position(
        mySimpleXYPlot.getGraphWidget(),
        0,
        XLayoutStyle.ABSOLUTE_FROM_LEFT,
        0,
        YLayoutStyle.RELATIVE_TO_CENTER,
        AnchorPosition.LEFT_MIDDLE);

它将被使用:

 mySimpleXYPlot.getGraphWidget().setSize(new SizeMetrics(
            0, SizeLayoutType.FILL,
            0, SizeLayoutType.FILL));

这将消除黑色区域。

答案 2 :(得分:1)

这适用于新设备:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    plot.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

答案 3 :(得分:1)

// Create a formatter to use for drawing a series using LineAndPointRenderer:
LineAndPointFormatter series1Format = new LineAndPointFormatter(
        Color.rgb(0, 200, 0),                   // line color
        Color.rgb(0, 100, 0),                   // point color
        Color.CYAN);  

缺少参数

应该是这样的

// Create a formatter to use for drawing a series using LineAndPointRenderer:
LineAndPointFormatter series1Format = new LineAndPointFormatter(Color.rgb(0, 200, 0),Color.rgb(0, 100, 0),Color.CYAN, new PointLabelFormatter());