2012-02-29 2 views
1

DrawView를 호출하는 활동을 만들었습니다. Canvas에서 이진 트리와 같은 것을 그립니다. 캔버스 크기가 화면 크기보다 크고 onDraw 함수는 표시되는 부분뿐만 아니라 모든 캔버스를 그립니다. 나는 수평 및 수직 scrollView를 추가했으며 분명히 onDraw는 뷰를 새로 고치기 위해 반복해서 호출됩니다. onDraw 함수를 호출 할 필요없이 해당 이미지를 사용하여 트리를 표시하는 이미지 (비트 맵 또는 그와 유사한 이미지)에 캔버스를 그릴 수 있는지 궁금합니다. 이 작업을 수행 할 수 없으면 더 빨리 볼 수 있도록하려면 어떻게해야합니까?Android : 빠른 onDraw()를 얻는 방법

답변

1

기술적으로 캔버스는 비트 맵을 그립니다. 실제로 화면보다 큰 비트 맵입니다. 왜 비트 맵을 화면보다 크게 만드나요? 더 큰 비트 맵 = 더 많은 메모리 사용 - 조금 느려질 수 있습니다. 화면의 잘린 범위 내에서만 실제로 그립니다. 화면에서 벗어나고 있다고 생각할 수는 있지만 실제로는 그렇지 않습니다. 다른 비트 맵을 그리는 것은 도움이되지 않습니다 - 이미 그렇게하고 있습니다. 코드를 보지 않고 당신은 시도 할 수 :

  • 만 만 변경된 내용을 페인트 다시 invalidate(rect)를 호출하여 이진 트리에 어떤 변화가 그리
  • 당신 이진 트리가 정적을 의미하는 경우
  • , 단지 PNG를 생성/그것의 JPG 모든 자신
  • 당신이
+0

내 트리가 정적이므로 두 번째 솔루션 포인트와 같은 것을 어떻게 구현할 수 있습니까? 내 말은, png/jpg를 내보낼 수는 있지만 사용자가 스크롤 할 때 어떻게 뷰에 표시 할 수 있습니까? – Ant4res

+0

원하는 png/jpg 이미지를 만들고 나면 canvas.drawBitmap()을 호출하여 docs를 호출합니다. 또는 (필요에 따라) ImageView를 사용하여 이미지를 설정할 수 있습니다. – dbryson

+0

많은 분들께 감사드립니다. – Ant4res

4

API 11 이상을 사용하는 경우 매니페스트의 애플리케이션 태그에서 하드웨어 가속 속성을 사용해 볼 수 있습니다.

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

View가 아닌 ​​다른 렌더링을 사용하는 것이 좋습니다. SurfaceView도 살펴보십시오.

일반적으로 UI 구성 요소 (예 : 버튼)를 작성하지 않는 한보기를 덮어 쓰지 않아야한다고 생각합니다.이 경우 나를 인용하지 마십시오.

+0

나는 안드로이드 2.3.3 (그래서 targetSdkVersion을 = "11")를 사용하고 필요 이상으로 무효화 호출하지 않는 확인을 그리기에 비해 해당 이미지를 표시 하지만 그것을 사용하려고하면 오류가 발생했습니다 : "속성 'hardwareAcceler에 대한 리소스 식별자가 없습니다. ated 'in android' " – Ant4res

+0

2.3.3이 API 레벨 10이기 때문에 그럴 수 있습니다. – DeeV

+0

불행히도 2.3.3은 API10이라고 생각합니다. – Andreas

관련 문제