2011-03-30 3 views
4

Android 휴대 전화에서이 간단한 애니메이션에 대한 도움이 필요합니다. 나는 애니메이션과 그래픽을 가진 초보자입니다.이 그래프 애니메이션을 최적화하는 데 도움이됩니다.

저는 가속도계 데이터를 슬라이딩 시간 시리즈 창으로 그래프로 나타냅니다. 새로운 가속도계 데이터를 읽을 때 다음과 같이 데이터가 왼쪽으로 이전 데이터를 밀어 오른쪽에 그려집니다 :

내 프로그램이 매우 원활하게 실행됩니다,하지만 난을 최적화하는 몇 가지 도움이 필요

생기. 여기 내 주요 문제는 다음과 같습니다

  1. 나의 현재 구현은 하나 개의 스레드에있는 모든 가속도계 데이터를 읽고 시계열 윈도우의 폭을 캡처하는 고정 된 크기의 FIFO 큐의 데이터를 유지합니다. 그런 다음 Timer.scheduleAtFixedRate()를 사용하여 대기열의 전체 내용을 플롯하여 전체 그래프가 50 밀리 초마다 다시 그려집니다. 이 문제를 개선 할 수 있습니까? 이렇게 자주 이렇게 그래프를 다시 그릴 필요가 있습니까? 필자가 보았던 또 다른 비슷한 프로그램에서 각 픽셀 열은 왼쪽의 한 픽셀에 복사되어 그래프 아래로 흐려집니다. 최신 데이터의 열은 맨 오른쪽 픽셀 열에 그려집니다. 이게 더 좋은가요?

  2. 드로잉 함수에서 50 밀리 초마다 실행되는 드로잉 스레드에서 범례 (왼쪽 위)를 다시 그립니다. 전설을 끊임없이 다시 그리지 않고 그 자리에 "보관"할 수있는 방법이 있습니까?

다른 도움을 받으실 수 있습니다. 이중 버퍼링과 같은 최적화에 대해 들어 봤지만 우스꽝 스럽다면 도움이 될 것입니다.

+0

대신 40ms를 사용하는 것이 좋습니다. 50ms는 눈이 기록하는 것보다 적은 20fps를 제공합니다. 따라서 사용자는 지연 또는 앨리어싱을 경험할 수 있습니다. 앱이 25fps를 관리한다면 이는 엄지 손가락으로 선택해야합니다. – Pedery

답변

1

범례와 십자형을 한 번만 그려야하는 경우 버퍼 비트 맵에 배치해야합니다. 그래프 라인의 경우 Path 오브젝트를 사용하여 선을 그려보십시오. 선을 그릴 시간이 생기면 적절한 지점에 drawLine을 놓고 캔버스를 적절히 왼쪽으로 옮깁니다.

+0

'버퍼 비트 맵'을 사용하여 범례 및 십자형처럼 정적 인 내용을 저장하는 방법에 대해 좀 더 자세히 설명 할 수 있습니까? 나는 그 기술에 익숙하지 않다. 또한 캔버스를 변환하는 것과 관련하여 그래프를 다시 그리는 것보다 빠릅니까? – stackoverflowuser2010

+0

나는 그것이 그렇게 보이지 않는 것을 안다. 그리고 나는 또한 충격을 받았다. 그러나 어떤 이유로, 제가 드로잉에 대한 모든 수학을했을 때 캔버스를 번역하는 것보다 더 오래 걸렸습니다. 버퍼에 관해서는 비트 맵 캔버스 쌍을 만들고 범례와 십자형을 그 안에 넣습니다. 그런 다음 API 캔버스를 가져 오면 해당 캔버스에 비트 앰프 버퍼를 그립니다. – AedonEtLIRA

+0

번역 접근 방식을 사용해 보겠습니다. 자, '버퍼 비트 맵'에 대해서, 나는 당신이 미리 그린 비트 맵에 범례와 십자선을 저장하고 페인트해야한다고 말하고 있습니까? 그렇다면 계속 페인트를 수행하기 위해 끊임없이 호출되는 View.onDraw() 메서드에서 페인트를 수행해야합니다. 전 어떻게 든 전설과 십자형을 고칠 수 있었고 그걸 다시 그리지 않아도되기를 바랬습니다. 불가능한가요? – stackoverflowuser2010

관련 문제