2012-12-27 15 views
5

Mam minimalistyczną tabelę przy użyciu aplikacji androidPlot w aplikacji i próbuję usunąć nieistotne elementy wizualne. Mam wszystko gotowe, tyle że nie mogę pozbyć się pustych miejsc wokół samego wykresu w widoku. Oto jak to wygląda z markup włączone, tylko siedzi w widoku głównym prowadzonej działalności:Jak usunąć całą przestrzeń wokół wykresu w AndroidPlot?

What my chart looks like

Jak mogę wyeliminować czarną przestrzeń pomiędzy wewnętrznymi granicami wykresu i zewnętrznej granicy widzenia? Oto mój kod:

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); 

I mój XML. Prawy margines jest przesunięcie w lewo miejsca, którego chcę się pozbyć:

<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" /> 

Nic nie mogę zrobić w XML wydaje się wpływać na wewnętrzne granice, w tym zmianę wagi układu zakrywające. Próbowałem też mają te, bez skutku:

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)); 

Co muszę zrobić, aby pozbyć się całej tej czarnej przestrzeni?

Odpowiedz

7

Sam wykres (mDynamicPlot w twoim przykładzie) to zbiór widżetów umieszczonych we wspólnej przestrzeni. Właściwą klasą obsługującą pozycjonowanie jest LayoutManager.

Oprócz pozycjonowania należy również dostosować rozmiar widżetu, aby wypełnić cały wykres. Każdy widget rejestruje swój własny rozmiar za pomocą instancji SizeMetrics. Możesz modyfikować rozmiar dowolnego widżetu, wywołując setSize (SizeMetrics newInstance); Obszar "wykresu", który cię interesuje, odpowiada XYGraphWidget.  

Ja osobiście nie przetestowane, ale wierzę, że poniżej kod powinien robić to, co chcesz:

// uzyskać uchwyt do 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

Działa jak czar, dzięki! –

+1

Jak mogę nazwać tę metodę 'lm.position'? –

+5

W Androidplot 0.6, "LayoutManager [już nie jest używany] (https://groups.google.com/d/msg/androidplot/941oGrWTi_I/OfTDVeoBl6cJ) do ustawiania widgetów X/Y w Widgetach, zamiast tego każdy Widget odpowiada za jego własne pozycjonowanie, a tym samym metody LayoutManager.position (...) są teraz dostępne jako metody Widget.position (...) ". Tak więc odpowiedni kod powinien mieć postać 'gw.position (0, XLayoutStyle.ABSOLUTE_FROM_LEFT, 0, YLayoutStyle.ABSOLUTE_FROM_TOP);' – ehartwell

0

SizeMetrics nie jest już używany do ustawiania rozmiar, zamiast tego Rozmiar jest używany z tym samym Konstruktorem, co SizeMetrics i tym samym sposobem użycia. Nowe połączenie wygląda następująco.

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 Czy to rozwiązanie nadal działa? – Franzi

Powiązane problemy