2012-10-01 5 views
1

나는 게임을 개발 중이다. 타이머 태스크를 사용했는데, GUI를 계속 업데이트하기 위해 실행해야한다. 두 애니메이션을 동시에 실행하려고하면 부드럽게 작동하지 않으며 애니메이션이 고르지 않게 보입니다.안드로이드 애니메이션이 부드럽 지 않다.

예를 들어, 프레임 애니메이션을 실행하고 실행 중에 목록을 스크롤하려고해도 원하는대로 부드럽게 스크롤하지 않습니다. runOnUiThread에서 몇 가지 애니메이션을 실행 해 보았지만 아무런 운이 없었습니다.

나는 또한 한 가지 더 알아 봤습니다. image.setVisibility (View.GONE) 또는 image.setVisibility (View.VISIBLE)를 사용하면 애니메이션 흐름이 중단됩니다.

이 문제에 대한 대안이나 대안을 제안하십시오. 여러 애니메이션을 동시에 실행하면 안드로이드에서 문제가 발생합니까?

답변

0

에뮬레이터에서만 테스트 한 적이 있다면 실제 장치를 먼저 시도해보십시오. 나는 에뮬레이터가 실제 장치처럼 렌더링 애니메이션에서 최고가 아니라는 것이 알려져 있다고 믿습니다.

3

대상 API는 무엇입니까? hardware acceleration을 (를) 사용 가능합니까?

<application android:hardwareAccelerated="true" ...> 
+0

안녕하세요 OceanLife, 저는 실제 기기에서 애니메이션을 테스트했으며 Android 2.3을 사용하여 기기를 타겟팅하고 있습니다. 하드웨어 가속이 Android 3.0에서 지원되기 때문에 다른 기기에 도움이되지 않을 수 있습니다. – Hades

+0

그 경우 뷰 - 컨트롤러 코드를 가능한 한 효율적으로 작성하여 뷰를 재활용하는 방법으로 돌아가겠습니다. 아마도 다른 곳의 비효율은 그것이 경로의 원인이 아닌 경우 슬로우 애니메이션으로 나타납니다. 또한 DDMS 도구를 사용하여 코드를 프로파일 링하고 비효율적으로 실행되는 코드 비트를 식별 할 수 있습니다. 또 다른 한가지는 앱이 실행되는 동안 GC (Garbage Collection)가 지속적으로 로깅되는 것을 본 것입니다. 가끔씩은 괜찮지 만 GC가 연속적으로 가비지 수집기를 제안합니다 (최근 출시 된 Android에서 동시 발생). – OceanLife

+0

그 모든 I/O, 계산 및 무거운 AsyncTasks로 이동 ... – OceanLife

0

4.0 (아이스크림 샌드위치) 전에 안드로이드 버전의 유동적 인 애니메이션을 기대할 수 없다고 생각합니다. 나중에 Android 버전에서 실행 해보면 큰 차이가 있습니다.

0

회신은 조금 늦었 그러나 나는 최근에 같은 문제가 없었다 및보기 다른 사람 위로 이동하는 경우

분명히, 그 강제 있습니다 ... 관심있는 사람들을 위해, 그래서 그것을 해결하는 방법을 알아 냈어 다시 그리다. 너무 많은 재 드로잉을 방지하는 한 가지 방법은 뷰 계층 구조를 평평하게하는 것입니다.

그러나 한 번에 여러 애니메이션을 사용하는 경우에는 충분하지 않을 수 있습니다. 이 경우 하드웨어 가속을 사용하는 장치에 대한 프로그래밍을 백그라운드 뷰와 같이 다시 그려진 뷰에서 비활성화하면 도움이됩니다 (예 : View.setLayerType(View.LAYER_TYPE_SOFTWARE, null)). 나는 이유를 모르지만 애니메이션을 아주 잘 매끄럽게 만듭니다. 아마도 GPU가 모든 다시 그리기를 처리하지 않기 때문입니다.

0

제 경험으로 보면 메모리 사용은 애니메이션의 성능에 영향을 줄 수 있습니다. 앱의 메모리 사용량을 줄일 수 있다면 긍정적 인 영향을 미칠 수 있습니다. 한 가지 쉬운 방법은 사용중인 이미지의 파일 크기를 줄이는 것입니다.

관련 문제