2011-02-11 6 views
2

나는 안드로이드에서 2D contour plot of some data을 그리려고 노력하고 있으며 그 중 가장 좋은 접근 방법이 무엇인지 궁금합니다. 전체 데이터 세트는 비교적 커질 수 있으며 (2k * 2k 포인트) 플롯 내에서 확대/축소 및 이동은 매우 빨라야합니다. 대부분의 경우 사용자가 데이터를 확대하면 데이터의 일부만 그려집니다.화면보다 훨씬 큰 캔버스 사용

내 생각은 이제 전체 그림을 큰 캔버스에 그려야하지만 화면에 보이는 부분에 클립을 붙여서 그 부분 만 실제로 그려지도록하는 것이 좋습니다. 나는 안드로이드의 2D 드로잉 API가 다소 혼란 스럽다는 것을 안다. 그리고 이것이 실제로 실현 가능한 접근법인지 그리고 어떻게 실행하는지에 대해서는 확신 할 수 없다.

그래서 제 질문은 다음과 같습니다

  • 가 화면보다 훨씬 큰 캔버스에 그리기 만 관련 부분을 표시하는 클리핑 사용하는 것이 좋습니다?
  • 큰 캔버스는 어떻게 만들 수 있습니까? 어떻게 그려야 할 부분을 선택하겠습니까?

답변

2

다른 방법으로 시작해야합니다. 거대한 캔버스를 만드는 대신 당신이 그려야 할 부분을 감지하고 그려야합니다.

기본적으로 네비게이션/스크롤링이 필요하며 현재 위치를 계산하기 위해 메모리의 시작점에서 오프셋을 유지해야합니다. 오프셋을 사용하면 화면에 플롯의 크기를 조절하기 만하면되므로 쉽게 확대 및 축소 할 수 있습니다.

1

는 훨씬 화면보다 크고 사용 만 관련 부분을 표시하는 클리핑 캔버스에 그리 좋은 생각인가?

더 좋은 질문이 있습니다. 다른 옵션이 있습니까? 어떤 이들은 UI에서 일어나는 일과 관련이 없을 때 메모리를 계속 사용하기 때문에 이것이 나쁜 생각이라고 주장 할 수 있습니다. 그러나 Canvas에 대한 제 경험에서이 문제가 잘 해결 될 것입니다. 이제 캔버스의 "5 평방 마일"을 메모리에 유지하려는 경우 확실히 관리 할 수있는 더 나은 방법을 찾아야합니다.

는 내가 더 큰 캔버스를 만들 것이며 은 어떻게하는 부품을 선택 할 방법

을 그려되어야 하는가?

사용자가 onTouchEvent 메서드를 재정 의하여 화면을 터치하면 자신 만의 "스크롤링"방법을 만들 것으로 예상됩니다. 기본적으로 출발점 X와 Y를 추적하고 화면에서 Canvas을 움직이면 그 값을 추적해야합니다. Canvas을 이동하려면 translatescale과 같은 숫자가 내장되어 있으며 사용자가 확대하거나 축소 할 때 X 및 Y로 Canvas을 이동하고 크기를 조절하는 데 사용할 수 있습니다.

1

큰 윤곽선을 큰 비트 맵에 그릴 생각이 드뭅니다. 왜냐하면 벡터 형식의 그래픽을 확대하고 축소하여 날카롭게 유지해야하기 때문입니다. 그림 만 축소 할 수 있지만 그래프는 비트 맵에서 축소 할 때가는 선을 잃거나 변형됩니다.

적절한 방법은 모든 것을 수학적으로 수행하고 필요한 위치와 확대/축소를 위해 그래프의 어느 부분을 그려야하는지 계산하는 것입니다. 선과 텍스트에 anti_alias 페인트를 사용하면 그래프가 항상 선명하고 멋지게 나옵니다 ... 사용자가 축소하면 일부 항목이 화면에 맞지 않거나 잘리지 않을 수 있습니다. 따라서 그래프는 항상 줌 레벨에 맞게 최적화됩니다 ...

관련 문제