2009-08-21 3 views
2

내가 현재 작업하고있는 응용 프로그램의 경우 여러 이미지 (UIScrollView의 페이징 사용 설정 가능)에 대해 ImageSwitcher과 같은 것을 만들었습니다.안드로이드에서 ImageViews 사이에서 페이징 최적화?

처음에 나는 ImageViews을 하드 코딩하고 생성/인플레이션에 드로어 블 리소스를로드했지만 약간의 조정 (개선 사항이라고 생각한 것) 후에 필요한 뷰를 3으로 줄였습니다. 그 중 2 개는 ImageViews 현재 페이지를 표시하고 현재 페이지와 새 페이지 사이에 애니메이션을 적용합니다. 이러한 변화와

, 나는 (내가 HVGA 디스플레이 용 크기의 PNG 파일을 사용하고 있습니다) 페이지를 통해 밀기 전에 제 2 ImageViews에서 새 이미지의 동적 로딩을위한 setImageResource/ setImageDrawable를 사용하기 시작했다.

실망스럽게도 성능은 페이지를 통해 더 빨리 슬라이딩 할 때 약간의 지연을 느끼는 정도까지 악화되었습니다. TraceView을 간략히 살펴보면 앱을 사용하는 동안 총 무려 17.4 %가 다음 무거운 방법보다 5 배 이상 더 많았으며, 드로어 블 리소스의 동적 설정에 의해 호출 된 BitmapFactory.nativeDecodeAsset에서 소모되었습니다.

나는 이것을 우회하는 방법을 생각하고 있으며 가능한 한 최선의 방법으로하고 싶습니다. 어떤 제안이라도 환영합니다.

+0

ImageSwitcher를 재발견 한 것 같습니다. ImageSwitcher는 다음을 수행합니다. 현재 이미지 및 다음 이미지를 표시하는 데 사용되는 2 개의 ImageViews. 소리가 나는 것과는 달리 처음에는 보였던 것처럼 두 이미지간에 앞뒤로 전환하는 데 사용되지 않습니다. 저는 이미지의 전체 피드를 통해 애니메이트하는 것과 같은 것들을 위해 종종 그것을 사용합니다 (그리고 다른 스위처를 사용하여 타이틀을 안팎으로 움직입니다). 나는 이것이 당신의 성과 문제를 해결할 것이라는 것을 모른다. 그러나 적어도 그것은 어떤 것들을 배제 할 수있다. – lilbyrdie

+0

제안 해 주셔서 감사합니다. ImageSwitcher를 여러 가지 이유로 재발견해야했습니다. 먼저 ImageView를 여러 개의 ImageView가 포함되어 있기 때문에 시작한 다음 현재 뷰와 도우미 뷰로 축소했습니다. 두 번째로 TextView 구성 요소를 제어해야하기 때문에 쉽게 ImageViews에서 도달 할 수 있습니다 - 나는 계층 구조를 평평하게하고 내가 원하는 것을 할 수있는 나의 커스텀 스위처 뷰를 사용할 것이라고 생각했습니다. 결국, AllocationTracker 및 TraceView로 재생 한 후 문제가 사용자 정의 ViewGroup에 있다고 생각하지 않습니다. –

답변

1

어떤 형식으로 이미지가 있습니까?

Android는 기본적으로 RGB565 이미지로 작동하므로 이미지를 해당 형식으로 변환 할 수 있으면 디코딩 속도가 훨씬 빨라집니다.

+0

안녕하세요, 이미지를 PNG 형식으로 가져 왔지만 이러한 파일의 버퍼가 RGB 565인지는 알 수 없습니다 (16 비트 고채도 이미지일까요?). .rgb565로 변환 된 이미지에서 비트 맵을 직접로드하려고 시도했지만 Android의 BitmapFactory가이 비트 맵에서 작동하지 않는 것 같습니다. 어쨌든, 감사합니다. –