2013-03-22 4 views
0

SurfaceView에서 상속 된 사용자 정의보기가 있고 동일한 RelativeLayout (사용자 정의보기 및 EditText는 모두 레이아웃의 xml에있는 형제)에 EditText가 있습니다. 나는 글고,Android EditText over SurfaceView

setVisibility(View.VISIBLE); 

사용자 정의보기의 onDraw (캔버스 C) 방법의 연속 통화를 수신이 방법을 볼 수 있도록합니다. 이유를 아는 사람이 있습니까? 나는 결코 명시 적으로 invalidate()를 호출하지 않았다.

+1

layout.xml을 보자. – Moesio

답변

0

여기에 아무런 문제가 없습니다. 정상적인 행동입니다. onDraw()은 많은 시간이 필요합니다. Android는 표시해야하는 변경 사항이있을 때마다 활동을 다시 그립니다. 활동이 다시 그려지는시기와 이유를 결정하는 많은 정교한 내부 알고리즘이 있습니다. 안드로이드는 우리를 위해 그것을 처리하고 우리는 그것에 대해 걱정할 필요가 없습니다.

활동이 다시 그려지면 모든 자식이 다시 그려집니다. 이것은 모든보기 및 사용자 정의보기에서 발생합니다. 코드에 아무런 문제가 없으므로 안심하십시오.

내부에 대해 자세히 알고 싶습니까? View 클래스의 source code을 확인하십시오!

+0

답장을 보내 주셔서 감사합니다. EditText가 표시 될 때를 제외하고 invalidate 메서드를 호출 할 때만 내 사용자 지정 뷰 다시 그려집니다. EditText는 자식이 아니며 사용자 정의 View에 대한 형제이며, 나는 묻습니다. EditText가 표시되어있는 동안 onDraw의 연속 호출을 억제하는 방법을 말해 줄 수 있습니까? 보이지 않게 설정하면 onDraw 호출이 중지되지만 가끔씩 표시해야합니다. – Catherine

+0

억제하지 마십시오. 이 동작은 안드로이드에서 의도 한 것입니다. 필요한 EditText를 사용하십시오. 해가 없습니다. –