2011-10-09 69 views
1

我想將一個畫布視圖添加到水平滾動視圖內的相對佈局。Android - canvas onDraw不會觸發

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:background="#fff" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
> 
    <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/hsv" 
     android:layout_width="fill_parent" 
     android:background="#EEDB00" 
     android:layout_height="30mm"> 

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/canvas" 
      android:background="#000" 
      android:layout_width="300mm" 
      android:layout_height="20mm"> 
     </RelativeLayout> 

    </HorizontalScrollView> 
</RelativeLayout> 

我創建了一個名爲CanvasView類擴展視圖,我用壓倒一切的onDraw()畫了一些基本的形狀。然而畫布不會出現在RelativeLayout的,當我這樣做:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     cView = new CanvasView(this); 
     rLayout = (RelativeLayout)this.findViewById(R.id.canvas); 
     rLayout.addView(cView); 
    } 

然而,當我直接調用setContentView(cView);它的作品添加。在挖掘過程中,我發現當我撥打addView()時,onDraw()根本沒有發射,因此畫布沒有繪製出來......關於如何解決這個問題的任何想法?

回答

2

我不是在一個位置,目前測試此我自己,但我覺得你的問題是,你未施加任何的LayoutParams的觀點,這可能意味着它不佔用屏幕空間。如果一個視圖不在屏幕上或完全被遮擋,或者系統決定不顯示任何東西,那麼我相信onDraw()根本不會被調用。

嘗試一些寬度和高度設置爲您查看,當你將它添加到您的RelativeLayout:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(50,50); 
rLayout.addView(cView, params);  
+0

這工作!非常感謝! – jeffreyveon

+0

這是我遇到的同樣的問題。我發現爲視圖添加背景也很有效。 – raydowe