2011-04-20 1 views
10

다른 팀 로고 모음이있는 이미지 (588x449) 스프라이트가 있습니다. Android에서는 다음을 표시하는 해당 ImageView가 있습니다.android에서 이미지 스프라이트 사용

 <ImageView android:id="@+id/image_team_logo" 
      android:src="@drawable/teamheaderssprite" 
      android:layout_height="25dp" 
      android:layout_marginLeft="5dp" 
      android:layout_marginTop="10dp" 
      android:layout_width="296dp" android:scaleType="matrix"/> 

위의 내용은 왼쪽 상단 구석에 내 이미지를 올바르게 표시합니다. 내 문제는 스프라이트의 다른 영역으로 이동할 수 있도록 표시되는 이미지에서 위치를 이동할 수 있어야한다는 것입니다. 이것은 HTML/CSS에서 꽤 일반적인 관행이며, 안드로이드 XML에서 '위치'유형의 속성을 보지 않고 있습니다.

답변

42

Android에서 HTML과 같은 방식으로 스프라이트를 사용할 수 없습니다. 스프라이트를 시뮬레이트하기 위해 생각할 수있는 한 가지 방법이 있습니다. 스프라이트를 완전히 수평 (또는 수직)으로 배치 한 다음 ClipDrawable을 사용하여 스프라이트의 새 파트로 각 레벨을 정의합니다. 그런 다음 각보기의 수준을 적절하게 정의하십시오. 스프라이트의 이미지가 모두 같은 크기가 아니라면 InsetDrawable도 사용해야 할 수 있습니다.

그러나 안드로이드에서 스프라이트를 사용하는 것에 대해 진지하게 생각할 것입니다.. 웹 페이지가 스프라이트를 사용하는 데는 이유가 있습니다. 왜냐하면 웹 페이지가 스프라이트를 사용하기 때문에 더 쉽기 때문이 아닙니다. it's because it speeds up webpages because you don't have to make multiple HTTP requests. 이미지는 이미 APK 버전에 있기 때문에이를 spriting하여 얻지는 못합니다.

뿐만 아니라,하지만 당신은 안드로이드에 스프라이트에 의해 어떤 피해를하고 있어요 : 일부 안드로이드 폰에

  1. 메모리 제약은 예상보다 훨씬 낮다. 그래픽 전체가 주어진 시간에 메모리에 있다면, 그것은 당신이 가지고있는 메모리의 양을 줄입니다.

  2. 일단 다른 화면 밀도 (ldpi, mdpi, hdpi)로 쓰기를 시작하면 스프라이트가 처리하기 어려워집니다.

+4

덕분에, 난 그냥 사용하지 않을거야 – mattyp

+0

사실, 스프라이트에 의해 증가 된 메모리 사용은 종종 간과됩니다. 기피! –

+0

그러면 스프라이트 대신에 무엇을 사용 하시겠습니까? openGL은 애니메이션을 위해 제안되지만, 나는 막대기 그림을 걷는 것과 같은 매우 간단한 애니메이션이면 어떨까요. 스프라이트 시트가 아니라면 어떻게 그 그림을 보여 주어야합니까? – uesports135