2012-03-11 7 views
3

내 ListView 위에 오버레이를 그리려고합니다. 그래서 가장 확실한 접근 방식을 사용하여 내 사용자 지정 드로잉 코드를 내 ListView 하위 클래스의 super.onDraw (캔버스) 아래에 배치했습니다.사용자 지정 목록보기 드로잉

놀랍게도 목록이 내 사용자 지정 그림 위에 렌더링되었습니다. FrameLayout있는 ListView 래핑하여 쉽게 수행 할 수 있지만 다른 뷰를 부풀게하는 것이 필요하지 않습니다 생각합니다. 수정과 내가 왜이 문제에 부딪쳤다는 설명은 끝내주게 될 것입니다, 고마워요!

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.drawRect(rect, paint); 
} 

답변

6

ListView에 대한 것은 실제로 목록의 내용을 그리기되지 않는 것입니다 :

내 드로우 코드는 다음과 같이 보입니다. 이것은 List에 바인딩 된 Adapter에 의해 처리됩니다. 특히 Adapter가 ListView를 채 웁니다.

ListView의 onDraw는 포함 된 뷰가 만들어지고 표시되기 전에 발생합니다.

이미 복잡한보기 위에 다른 레이어를 합성 할 때 ListView 위에 물건을 그리는 것이 비용이 많이들 수 있습니다. 다른 뷰를 맨 위에 배치하는 것은 (의도 한대로 FrameLayout을 사용하여) 시도하는 것을 "수행하는"최선의 방법 일 수도 있고, 달성하려는 효과에 따라 어댑터 또는 뷰를 수정할 수도 있습니다 오버레이하려는 데이터를 표시합니다. 대신 onDraw

4

재정 dispatchDraw 당신이 원하는 것을 할 것 같다 :

@Override 
protected void dispatchDraw(Canvas canvas) { 
    super.dispatchDraw(canvas); 
    ... 
} 
+0

이것은 내가 무엇을 찾고 있었다입니다! – themarshal

관련 문제