마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

터치한 영역에 애니메이션 혹은 효과를 주고 싶습니다. (두번째 질문!)

0 추천
일전에 이 글과 같은 질문 제목으로 글을 올렸던 초급 개발자입니다.

 

안드로이드 어떤 화면에서든 터치 영역에 애니메이션 혹은 효과를 주고 싶다는 질문에 서비스를 통해서 이미지 뷰를 올리면 될꺼라고 답변을 받았습니다.

일단 터치한 영역에 이미지를 띄우고 이동시키는 구현을 Surface, Canvas, ACTION_MOVE, ACTION_UP, ACTION_DOWN을 통해서 원하는 동작을 얻어냈습니다.

여기서 부터 질문 드립니다.

1) Canvas를 서비스에 올려야하는데 가능할까요?

2) Canvas가 서비스에 올라가게되면 이미지를 이동시킬 수 있나요? (서비스에서 이미지를 이동시키는 이벤트를 호출)

3) 위 1,2번이 모두 가능하다해도 Canvas가 투명처리 될 경우 Canvas는 초기화가 아닌 덧붙이는 것이기에 배경화면에 잔상이 계속 남게 되는 것으로 알고있습니다. 이렇게 될경우 제가 원하는 결과를 얻기위해선 접근방법이 좀 잘못된 것 같은데... 제가 원하는 결과를 얻기위해선 View에 Canvas를 올리는게 아닌 다른 방식으로 이미지를 그려야 하는지 궁금합니다.

 

질문이 길고... 두서없이 써서 죄송합니다.

답변 부탁드리겠습니다. 감사합니다.
익명사용자 님이 2014년 2월 13일 질문

1개의 답변

0 추천
 
채택된 답변

 

  1. Canvas를 서비스에 올린다는게 무슨말인지... Service는 UI가 없는 컴포넌트입니다. Service에 참조시킨다는 뜻이라면... 어짜피 그리는 동작은 Service 스코프안에서 해야합니다...
  2. WindowManager에 올린 뷰인가요? 그렇다면 updateViewLayout 해야하는 것으로 알고 있습니다.
  3. Canvas에 애니메이션을 그려 낼때 프레임마다 drawColor(color) 등으로 이전 그림을 싹 밀고 다시 그리죠... 이전의 그림을 유지해야하는 경우에는 밀지않고 그리거나 이전 상태를 따로 보관했다가 다시그립니다.
    안드로이드의 모든 보이는 객체는 View의 onDraw에서 Canvas그려져 보여집니다. 안드로이드 시스템에서 가장 저 수준의 draw표현 방법이 Canvas를 이용한 출력입니다.S

추가로... SurfaceView를 사용하셨다고 하는데 SurfaceView는 표현하려고 하는 Window에 자기 영역만큼의 펀치홀을 뚫고 그곳을 이용해서 SurfaceHolder와 독자적으로 관계하며 Draw합니다. (뷰의 계층구조의 invalidate&draw를 따르지 않음.)

문제는 이곳이 검정색이라는 겁니다... 투명이 안됩니다...

 

칠리님 (10,910 포인트) 님이 2014년 2월 13일 답변
...