2011-10-09 39 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