2014-07-12 4 views
0

나는 안드로이드 플랫폼 용 게임을하고있다. 레이아웃은 위에서 아래로 멈추지 않고 움직여야하는 요소로 구성됩니다. 나는 Handler을 사용하기로 결정했고 handler.postDelayed(this, 10)을 설정했습니다.
애니메이션 '단계'는 5px입니다. 실제로는 px이 아니지만 토론에는 중요하지 않습니다.애니메이션이 너무 느리다

사물은 자주 비틀 거리며 매끄럽지 않습니다. 핸들러를 호출 할 때마다 간단한 점검을하고 setX(), setY()을 사용하여 요소 위치를 변경합니다.

애니메이션을 부드럽게하려면 어떻게해야합니까? 위의 숫자 언급을 조정해야합니까? 또한, 나는 방법을 이해했습니다 setWillNotDraw(boolean b) 유용 할 수도 있습니다 - 그것을 현명하게 사용하는 방법?

내가해야 할 일을 안내 할 수 있다면 기쁠 것입니다. (할 일의 종류).

감사합니다.

+0

코드 속도에 대한 측정을 수행하십시오. 일반적으로 애니메이션에서 말더듬을 피하려면 프레임 당 16ms를 넘지 않는 금액을 소비해야합니다. – nhaarman

+0

시간 계산이 아닌 계산을 할 수 있습니다. 그것은 단지 2-3의 간단한'if'-s입니다. – AngryOliver

+0

Handler 대신 ValueAnimator를 사용하려고 시도합니다 – pskink

답변

1

마찬가지로 pskink는 ViewPropertyAnimator이 뷰를 애니메이션으로 만드는 것보다 훨씬 우호적이라고 제안합니다. 수동으로 관리하거나 관리해야하는 경우 Handler.postDelayed 대신 View.postOnAnimation을 사용하여 새 애니메이션 프레임으로 업데이트를 실행하십시오.

개체를 이동하는 방법에 관계없이 화면에 몇 개의보기가 있는지 조심하십시오. 하나의 뷰를 이동하면 전체 뷰 계층 구조가 레이아웃을 다시 실행하게 될 수 있습니다. 이는 애니메이션 속도를 확실히 없앨 수 있습니다. 비어있는 레이아웃에서 단일보기의 애니메이션을 적용 해보십시오.

Profiling은 성능 문제를 추적하는 데 매우 유용합니다.

+0

감사합니다. btw,'animate()'메서드를 어떻게 반복합니까? – AngryOliver

+0

여러분을 환영합니다. 'setListener'에'onAnimationEnd'에 대한 애니메이션을 다시 시작해야한다고 생각합니다. Android의 새 버전 만 타겟팅하는 경우 'Animation.withEndAction'이 조금 더 간단합니다. – Darrell

관련 문제