2011-10-09 6 views
1

캔버스 뷰를 가로 스크롤 뷰 내부의 상대 레이아웃에 추가하려고합니다.안드로이드 - 캔버스 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> 

View를 확장하는 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

관련 문제