Использование спрайтов изображений на android

У меня есть изображение (588x449) sprite с коллекцией различных логотипов команды. В 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, я просто не вижу свойства типа "позиция" в android XML.

1 ответов


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

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

не только это, но вы делаете некоторый вред, спрайтинг на Android:

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

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