2012-12-27 62 views
5

我在應用程序中使用了androidPlot的極簡主義圖表,並一直試圖刪除多餘的視覺元素。我已經完成了所有工作,除了我無法擺脫視圖內圖表本身周圍的空白空間。下面是它看起來像標記打開,只是坐在一個活動的根視圖:如何在AndroidPlot中移除圖表周圍的所有空間?

What my chart looks like

我怎樣才能消除內部圖表邊界和外部視圖邊界之間的黑色空間?這裏是我的代碼:

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

而我的XML。右頁邊距是抵消我想擺脫的剩餘空間:

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

沒有我在XML做似乎影響了內部邊界,包括改變封閉的佈局重心。我也嘗試了這些,沒有效果:

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

什麼我需要做的,擺脫所有的黑色空間?

回答

7

繪圖本身(您的示例中的mDynamicPlot)本質上是位於共享空間中的小部件集合。處理定位的實際類是LayoutManager。

除了定位之外,還需要調整Widget的大小以填充整個Plot。每個小工具都使用SizeMetrics的一個實例來跟蹤自己的尺寸。您可以通過調用setSize(SizeMetrics newInstance)來修改任何Widget的大小;您感興趣的「圖表」區域對應於XYGraphWidget。  

我沒有親自測試,但我相信下面的代碼應該做你想要什麼:

//獲得一個句柄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

工程就像一個魅力,謝謝! –

+1

我該如何調用這個''lm.position'方法? –

+5

在Androidplot 0.6中,「佈局管理器[已不再使用](https://groups.google.com/d/msg/androidplot/941oGrWTi_I/OfTDVeoBl6cJ)」用於小部件的x/y定位;相反,每個小部件都負責自定義,因此LayoutManager.position(...)方法現在可用作Widget.position(...)方法「。所以相應的代碼應該是'gw.position(0,XLayoutStyle.ABSOLUTE_FROM_LEFT,0,YLayoutStyle.ABSOLUTE_FROM_TOP);' – ehartwell

0

SizeMetrics不再是用來設置大小,而不是大小與SizeMetrics使用相同的構造函數和使用相同的方式。 新的調用看起來像這樣。

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此解決方案是否仍然有效? – Franzi