2

먼저 SurfaceView가 포함 된 FrameLayout과 두 번째로 다양한 Buttons 및 TextViews가있는 RelativeLayout이 있습니다.Android : SurfaceView 및 Z 레벨 질문

SurfaceView의 캔버스에서 저는 수많은 비트 맵을 그리고 Touch and Motion Events를 통해 사용자가 드래그 할 수있게합니다.

이러한 비트 맵을 드래그하면 아래의 RelativeLayout 안에있는 버튼 등이 전달됩니다.

SurfaceView의 "Z- 레벨"또는 그 패스가 무엇이든 실제로 나머지 레이아웃의 Z- 레벨과 완전히 관련이 없다는 것은 내 잘못입니다. . 이 경우인가요? 그렇다면 어떻게 주위를 둘러 볼 수 있습니까? 그러면 드래그 한 비트 맵은 다른 뷰의 꼭대기에 그려지 죠? 또는 다른 방법으로는 전체 화면 캔버스를 구현할 수 있지만 내 버튼 등은 오버레이 컨트롤처럼 작동하지 않습니다.

실제적으로 필요한 것은 언더 레이입니다. 터치 이벤트는 여전히 아래의 버튼 등으로 선택할 수 있습니다. 그러나 캔버스를 다시 그릴 때 배경을 다시 그려야하므로이 작업을 수행하는 방법을 알지 못합니다.

FrameLayout 내에서 RelativeLayout 및 SurfaceView의 순서를 서로 바꾼 다음 캔버스의 배경을 투명하게 만들 수 있습니까? 그렇다면 어떻게? 터치 이벤트가 여전히 아래 버튼에 "넘어"있습니까?

나와 함께 견뎌 주셔서 감사합니다. 나는 약간의 와플러를 알고 있습니다.

답변

0

좀 더 자세히 설명해 주시겠습니까? SurfaceView에 배정 된 배경이 있습니까? 그렇지 않다면, AbsoluteView를 사용할 수도 있습니다. 의도적으로 조각을 드래그하는 것입니다. 배경이없는 경우에는 사용자가 가지고있는 RelativeView 위에 전체보기를 배치 할 수 있어야하며 위에있는보기에 그려진 다양한 단추 만 드래그 가능하고 나머지 모든 항목 위에 남아 있어야합니다.

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 비트 맵을 드래그하면 해당 비트 맵의 ​​현재 위치를 그리기 전에 캔버스 배경이 COLOR.Black으로 설정되어 있지 않으면 MotionEvent 중에 다시 그려진 사본의 흔적이 남습니다. 그렇습니다. SurfaceView/Canvas의 배경이 있습니다. – JimBadger

1

SurfaceView는 그렇게 작동하지 않습니다.

SurfaceView에는 "보기"부분과 "서페이스"부분의 두 부분이 있습니다. "보기"부분은 다른보기 요소와 함께 배치 된 투명 구멍이며보기 레이어에 합성됩니다. "서페이스"파트는 "뷰"파트와 일치하도록 배치되고 크기가 조정되고 응용 프로그램이 아닌 시스템 컴포지션에서 합성되는 완전히 분리 된 레이어입니다.

SurfaceView가 처음 생성되었을 때 "표면"레이어의 Z 순서를 제어 할 수 있지만 모든 View 요소보다 위 또는 아래에 있습니다. 완전히 독립적 인 레이어이기 때문에 일부 뷰와 그 아래에 위치 할 수 없습니다. "표면"레이어는 입력 이벤트를 포착하지 않으므로 상단에 (SurfaceView#setZOrderOnTop()을 통해) 포커스를두면 입력 포커스에 영향을주지 않습니다.

API 14+의 경우보기 쉬운 방식으로 동작하는 TextureView를 사용할 수 있습니다.

편집 : 자세한 내용은 much longer explanation을 참조하십시오.