2012-12-27 9 views
5

Ho un grafico minimalista utilizzando AndroidPlot in un'applicazione e ho cercato di rimuovere elementi visivi estranei. Ho fatto tutto, tranne che non riesco a liberarmi di alcuni spazi vuoti attorno al grafico stesso all'interno della vista. Ecco come si presenta con markup acceso, appena seduto nella vista principale di un'attività:Come rimuovere tutto lo spazio attorno a un grafico in AndroidPlot?

What my chart looks like

Come posso eliminare lo spazio nero tra i confini del grafico interno e la vista confine esterno? Qui è il mio codice:

mDynamicPlot = (XYPlot) findViewById(R.id.dynamicPlot); 
    mDynamicPlot.getGraphWidget().setDomainValueFormat(new DecimalFormat("0")); 
    mDynamicPlot.addSeries(mCpuData, new LineAndPointFormatter(Color.rgb(51, 204, 255), null, Color.rgb(8, 153, 194))); 
    mDynamicPlot.setDomainStepMode(XYStepMode.INCREMENT_BY_VAL); 
    mDynamicPlot.setRangeBoundaries(0, 100, BoundaryMode.FIXED); 
    mDynamicPlot.setDomainStepValue(10); 
    mDynamicPlot.setRangeStepValue(5.0d); 
    mDynamicPlot.setRangeValueFormat(new DecimalFormat("#")); 

    mDynamicPlot.setTicksPerDomainLabel(Integer.MAX_VALUE); 
    mDynamicPlot.getLayoutManager().remove(mDynamicPlot.getLegendWidget()); 
    mDynamicPlot.getLayoutManager().remove(mDynamicPlot.getRangeLabelWidget()); 
    mDynamicPlot.getLayoutManager().remove(mDynamicPlot.getDomainLabelWidget()); 
    mDynamicPlot.getLayoutManager().remove(mDynamicPlot.getTitleWidget()); 

    mDynamicPlot.getGraphWidget().setMarginTop(10);   

    mDynamicPlot.setBackgroundPaint(null); 
    mDynamicPlot.getGraphWidget().setBackgroundPaint(null); 
    mDynamicPlot.getGraphWidget().setGridBackgroundPaint(null); 

    mDynamicPlot.getGraphWidget().setDomainLabelPaint(null); 
    mDynamicPlot.getGraphWidget().setDomainOriginLabelPaint(null); 

    mDynamicPlot.getGraphWidget().setGridLinePaint(null); 
    mDynamicPlot.getGraphWidget().setDomainOriginLinePaint(null); 
    mDynamicPlot.getGraphWidget().setRangeOriginLinePaint(null); 

    mDynamicPlot.setDrawBorderEnabled(false); 

E il mio XML. Il margine destro è di compensare lo spazio lasciato che voglio sbarazzarsi di:

<com.androidplot.xy.XYPlot 
    android:id="@+id/dynamicPlot" 
    android:layout_width="fill_parent" 
    android:layout_height="150dp" 
    android:layout_marginTop="16dp" 
    android:layout_marginRight="10dp" 
    title="Dynamic Plot" /> 

Niente di quello che faccio in XML sembra interessare i limiti interni, compresa la modifica la gravità di layout racchiude. Ho anche provato questi, senza alcun risultato:

mDynamicPlot.getRangeLabelWidget().setHeight(0); 
    mDynamicPlot.getRangeLabelWidget().setPadding(0, 0, 0, 0); 
    mDynamicPlot.getRangeLabelWidget().setMargins(0, 0, 0, 0); 

    mDynamicPlot.getLegendWidget().setSize(new SizeMetrics(0, SizeLayoutType.ABSOLUTE, 0, SizeLayoutType.ABSOLUTE)); 
    mDynamicPlot.getRangeLabelWidget().setSize(new SizeMetrics(0, SizeLayoutType.ABSOLUTE, 0, SizeLayoutType.ABSOLUTE)); 
    mDynamicPlot.getDomainLabelWidget().setSize(new SizeMetrics(0, SizeLayoutType.ABSOLUTE, 0, SizeLayoutType.ABSOLUTE)); 

Che cosa devo fare per sbarazzarsi di tutto quello spazio nero?

risposta

7

Il grafico stesso (mDynamicPlot nel tuo esempio) è essenzialmente una raccolta di widget posizionati in uno spazio condiviso. La classe effettiva che gestisce il posizionamento è LayoutManager.

Oltre al posizionamento, anche la dimensione del widget deve essere regolata per riempire l'intero grafico. Ogni Widget tiene traccia delle proprie dimensioni utilizzando un'istanza di SizeMetrics. È possibile modificare la dimensione di qualsiasi widget richiamando setSize (SizeMetrics newInstance); L'area "grafico" a cui sei interessato corrisponde a XYGraphWidget.  

ho non testato personalmente questo, ma credo che il codice qui sotto dovrebbe fare quello che vuoi:

// ottiene un handle per il XYGraphWidget:

Widget gw = mDynamicPlot.getGraphWidget(); 

// FILL mode with values of 0 means fill 100% of container: 
SizeMetrics sm = new SizeMetrics(0,SizeLayoutType.FILL, 
           0,SizeLayoutType.FILL)); 
gw.setSize(sm); 

// get a handle to the layout manager: 
LayoutManager lm = mDynamicPlot.getLayoutManager(); 

// position the upper left corner of gw in the upper left corner of the space 
// controlled by lm. 
lm.position(gw, 0, XLayoutStyle.ABSOLUTE_FROM_LEFT, 
      0, YLayoutStyle.ABSOLUTE_FROM_TOP); 
+0

Funziona come un incanto, grazie! –

+1

Come posso chiamare questo metodo '' lm.position'? –

+5

In Androidplot 0.6, "LayoutManager [non è più utilizzato] (https://groups.google.com/d/msg/androidplot/941oGrWTi_I/OfTDVeoBl6cJ) per il posizionamento x/y dei Widget, invece ogni Widget è responsabile della sua il proprio posizionamento e quindi i metodi LayoutManager.position (...) sono ora disponibili come metodi Widget.position (...) ". Quindi il codice corrispondente dovrebbe essere 'gw.position (0, XLayoutStyle.ABSOLUTE_FROM_LEFT, 0, YLayoutStyle.ABSOLUTE_FROM_TOP);' – ehartwell

0

SizeMetrics non è più utilizzato per impostare la dimensione, invece Dimensione viene utilizzata con lo stesso Costruttore di SizeMetrics e allo stesso modo di usare. nuova chiamata assomiglia a questo.

Widget gw = mPlot.getGraph();  
Size size = new Size(0,SizeMode.FILL,0,SizeMode.FILL);  
gw.setSize(size); 
gw.position(0, HorizontalPositioning.ABSOLUTE_FROM_LEFT,0, VerticalPositioning.ABSOLUTE_FROM_TOP); 
+0

@Nick Questa soluzione funziona ancora? – Franzi

Problemi correlati