Использование спрайтов изображений на Android - PullRequest
10 голосов
/ 20 апреля 2011

У меня есть изображение (588x449) спрайта с коллекцией различных логотипов команд.В Android у меня есть соответствующий ImageView, отображающий это:

        <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, я просто не вижу свойства типа 'position' в android xml.

1 Ответ

48 голосов
/ 20 апреля 2011

Нельзя использовать спрайты на Android так же, как на HTML. Однако я могу придумать один способ имитации спрайтов: выложить спрайт полностью горизонтально (или вертикально), а затем использовать ClipDrawable , чтобы определить каждый уровень как новую часть спрайта. Затем определите уровень каждого просмотра соответствующим образом. (Если изображения в спрайте не имеют одинаковый размер, возможно, вам также потребуется использовать InsetDrawable.)

Однако я бы серьезно переосмыслил использование спрайтов в Android . Существуют причины, по которым веб-страницы используют спрайты, и не потому, что они проще - , а потому, что это ускоряет веб-страницы, потому что вам не нужно делать несколько HTTP-запросов . Так как изображения уже будут в вашем выпускном APK, вы ничего не получите, спрайтовав их.

Мало того, вы наносите вред спрайту на Android:

  1. Ограничения памяти на некоторых телефонах Android намного ниже, чем вы могли ожидать. Если вся ваша графика находится в памяти в любой момент времени, это уменьшает объем памяти, который у вас есть для всего остального.

  2. Спрайты станут сложнее обрабатывать, как только вы начнете писать для экранов разной плотности (ldpi, mdpi, hdpi).

...