2016-10-19 17 views
1

헤더와 메뉴 항목의 원으로 구성된 ViewGroup이 있습니다. 기본적으로 필자는 항목 뷰가 헤더 뷰 뒤에있는 닫기/열기 애니메이션을 사용합니다. 모든보기에는 투명도가 있기 때문에 항목보기가 머리글보기 뒤로 이동하면 항목보기가 여전히 보이고 투명도를 통해 머리글보기 뒤에 나타납니다.특정 자식 뷰 앞에 그려야합니다.

내가 원했던 것은 교차점을 지우고 hweader 뷰와 항목보기를 교차시키는 것입니다. 내가 생각해 낸 것은 dispatchDraw을 오버라이드하고 다음과 같은 작업을 수행하는 것입니다. PorterDuff.Mode.CLEAR

그러나 모든 관점에서이 점을 한 번에 할 수 있습니다. 아래 코드를 사용하면 해당 특정 영역의보기에서 그려진 모든 항목이 지워 지므로 헤더도 지워집니다.

@Override 
protected void dispatchDraw(Canvas canvas) { 
    super.dispatchDraw(canvas); 
    //do stuff here 
} 

다시보기를 그릴 수있는 방법이 있습니까, 아니면 지울보기를 선택할 수 있습니까?

답변

1

나중에 참조 할 수 있도록이 작업을 수행했습니다. Dispatch Draw를 오버라이드하고 주어진 영역을 지우고 다시 그립니다. child.draw(canvas)

@Override 
protected void dispatchDraw(Canvas canvas) { 
    super.dispatchDraw(canvas); 
    Paint p = new Paint(); 
    p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
    canvas.drawCircle((float) center.x, (float) center.y, headerSize/2, p); 
    canvas.save(); 
    canvas.translate(padding, padding); 
    getChildAt(0).draw(canvas); 
    canvas.restore(); 
}