Выкладываю вполне доходчивую и понятную статью о создании скинов и сплэшей для аудиоплеера TTPod. Статья не моя, автор ее - некто
Histler (за что ему и спасибо). Ниже статьи - мои комментарии, прошу их прочитать, т.к. статья в некоторых моментах не актуальна.
Как вы, наверное, уже заметили, с появлением новой версии плеера, стали появляться на него новые скины… но такие ли они новые? В большинстве своем (но, к счастью, не все), это всего лишь клоны стандартных.… Этот же мануал призван помочь вам научиться делать свои собственные скины, не похожие на скины остальных. Вся работа (основная ее часть) будет проводиться на компе, ибо ковыряться с картинками на телефоне – занятие очень муторное и не доставляет какого-либо удовольствия… конечно, люди, не имеющий компьютер или предпочитающие делать все на смарте, могут обойтись и без компа, но моя задача облегчить жизнь большинству, а не каждому. Хочу также подчеркнуть, что данный мануал написан не для спецов, а преимущественно для новичков, поэтому здесь будет много воды и подробностей, которые некоторым покажутся элементарными. На этом лирическая часть заканчивается, и мы приступаем непосредственно к созданию скину.
Очень важный момент при создании скинов – перечень программ, которые мы будем использовать для своих творений (вы можете использовать альтернативные программы, просто мне этими удобнее):
-Фотошоп (для редактирования картинок)
-Пеинт (для тех же целей + им удобно определять место положения будущих кнопок в нашем скине)
-Cygnus Hex Editor или любой другой hex-редактор (для перевода ttb файлов в mbm и обратно) – не обязателен, так как теперь плеер и с mbm-файлами работает
-MbmTool (для работы с mbm файлами)
-блокнот (для редактирования xml файлов на компе) и Ded (для редактирования xml файлов на смартфоне).Для начало, естественно, нужно выбрать, на какую тематику вы будете делать скин, найти в инете фотки для заднего плана и прочее…
Я буду использовать в качестве примера скин AS_Fx21_EVO для winamp`а.
Как вытащить картинки из Winamp`овских скинов? Очень просто – открываем скин winrar`ом (указывать его в перечне я не стал, т.к. он не нужен, если у нас уже есть заготовки).
Смотрим на скрин и думаем, что бы нам из него вытащить… вспоминаем, что скин состоит из “главного окна, на котором расположены название тек. и след. песни, кнопки play, pause, stop, next, prev, регулировки громкости, ползунка прогресса, визуализации, уже проигранного времени (и, возможно, длительности песни), значков для режимов воспроизведения (повтор песни, рандом,…), значка будильника и таймера, обложки альбома, кб/с и кГц для данной песни и еще много всего ненужного….” – так было раньше. Теперь скин состоит из 7 основных частей:
1) Общее окно (та информация, которая будет отображаться во всех окнах)
2) Главное окно
3) Плейлист
4) Окно текста песни
5) Эквалайзер
6) Мини-плеер
7) Мини-окно с текстом песен.
В силу того, что китайцы полностью изменили структуру файла с описанием скина, подобрать элементы наугад не получится.… Придется довольствоваться тем, что известно из стандартных скинов, а именно: кнопки прокрутки вперед/назад, play/pause (причем это одна кнопка, кнопки стоп больше (вроде бы) нет), иконки режимов воспроизведения остались без изменений, иконки будильника и таймера, разные надписи (название песни, исполнитель, альбом, длина песни и уже проигранная часть и т.д.), также можно вместо цифр использовать картинки (как и в предыдущих версиях), и еще можно кучу всяких своих картинок понапихать.
Что мы не найдем в скине, то мы нарисуем сами.
Для начала, для основных окон под номерами 2-4 мы должны создать в фотошопе задний фон с разрешением 240*320 (или, если у вас иное разрешение экрана, создавайте пустой файл со своим разрешением… обязательно под разрешение вашего экрана, иначе у вас в скине будут области, к которым у вас не будет доступа (в общем, описать это довольно трудно, если хотите увидеть, попробуйте сделать задний фон, скажем, на пикселей 20 меньше, чем ваше разрешение), причем он [задний фон] может быть в каждом окне одним и тем же. Как можно заметить, в стандартных скинах обычно задним фоном для одной ориентации экрана служит один файл (обычно он идет под номером 0, но вы можете поставить его под любым другим номером).Будем считать, что вы уже определились, как должен выглядеть ваш скин (если нет, то думаю далее читать нет смысла:)). Значит вы должны хотя бы примерно знать, что и где будет у вас расположено, и как это может двигаться:)) Лично я сразу определил, что задний фон у меня будет один и тот же (как на рисунке слева). Теперь необходимо примерно определить ту область экрана, которая будет двигаться при смене окон (в общем, при переходе от главного окна к плейлисту и т.д.). Та часть, что не будет двигаться – это своеобразные бары по краям экрана (они могут быть, а могут и не быть – вам решать… также вам решать, стоит ли на место этих баров ставить какие-то элементы или просто оставить задний фон). Эти бары можно сделать абсолютно любого размера. Лично у меня верхний бар на этом скине будет от самого верха до полосы прогресса (под надписями prev, play и т.д.) В эту часть экрана можно поместить не только какие-то необходимые части скина (вроде длины песни, кнопок воспроизведения и т.д.), но и всевозможные объекты, не несущие какого либо значения – это огромный шаг со стороны создателей ттпода. Теперь, как и на powerMP3 можно добавлять на скин всевозможные картинки в том или ином месте… жаль только маски для них всех рисовать нужно.…Кстати о масках, маска – это картинка, которую мы хотим видеть, но в черно-белом варианте, причем, отображаемая часть картинки должна быть черной, а невидимая часть белой (прозрачность определяется оттенками серого цвета на маске… также бывают абсолютно противоположные маски, в которых отображаемая часть картинки должна быть белой, а невидимая – черной… на такие маски при упаковке ставятся другие параметры цвета, но об этом позже…). Слева вы можете увидеть пример картинки и маски для нее. Хочу сразу вас предупредить, что маски придется делать для всех картинок (за исключением может заднего фона).Когда у вас готов задний фон, можно приступить к остальным главным окнам. Можно сделать некий эскиз того, как все будет выглядеть в итоге (можно обойтись скрином главного окна), чтоб было проще понять, где что должно быть, и если вы работаете в фотошопе, думаю лучше все делать на разных слоях (чтобы перемещать или удалять непонравившиеся элементы) и сохранять не только в psd, но и в каком-нибудь другом формате, который понимает телефон, чтоб в любой момент этот эскиз можно было закинуть на телефон и посмотреть, как он будет выглядеть непосредственно на нем. Готовые изображения советую сразу сохранять в формате bmp (да да, сохранять готовые картинки не в jpg или png форматах, а именно в bmp, ибо mbm файл состоит из множества bmp фалов (по крайней мере оно так, если верить mbmtool`у)).
Эскиз готов? У меня да. Теперь смотрим, какие элементы нам понадобятся – различные кнопки, картинки и проч….
Какие существуют кнопки?
1) Кнопки плей/пауза, прокрутка вперед/назад
2) Кнопки режимов воспроизведения (повтор песни, повтор плейлиста, случайное воспроизведение и нормальное воспроизведение) – все 4 должны быть одинакового размера
3) Кнопка будильника и таймера.
Существуют еще 2 “ползунка”: текущий прогресс и громкость. Каждый из этих ползунков может иметь вид открывающейся картинки или некоего объекта, с передвигающимся по нему маленьким курсором (также может состоять из обоих сразу). Причем двигаться/открываться они могут как горизонтально, так и вертикально.
Из рисуемых элементов осталась только визуализация и “левые” картинки.
Кстати, в версии 3.4 визуализацию можно не рисовать, достаточно просто задать цвет полосок, прыгающих сверху этих полосок палочек, задать ширину полосок, расстояние между ними и их количество, но об этом позже… p.s. если вы хотите, чтоб у вас визуализация была зеркальной, то такого эффекта нельзя добиться с рисованной визуализацией.
p.s. стоит заметить, что все описанные выше элементы (включая неописанные мною надписи) для главного окна можно расположить на общей части. Лично у меня на общей части будет располагаться практически все элементы главного окна (кроме визуализации и еще некоторых элементов).
Допустим, вы нарисовали все необходимые для главного окна картинки. Теперь можно приступать к плейлисту. Для плейлиста нужны следующие картинки (с масками):
1) Значки проигрывающегося и приостановленного файла (слева от файла)
2) Значок песни, автора, альбома, жанра, папки, файла и значок перехода на уровень выше – те значки, что отображаются слева от песен в плейлисте (если лень рисовать, их можно брать из стандартных скинов)
3) Всплывающая картинка, на которой будет располагаться информация о треке при наведении на него – ее можно и не делать
4) Полоска, которой будет выделяться выбранная песня в плейлисте (когда вы находитесь в плейлисте и нажимаете вверх/вних, некая “выделяющая полоска” переходит с песни на песню…) – ее можно и не делать.
Также как и в главном окне, можно добавить другие картинки по вкусу. Например, в стандартных скинах есть такая картинка как PanelIcon – это маленькая картинка в верхней части скина, показывающая на какой странице вы находитесь. Обычно китайцы добавляют ее на каждую страницу и просто меняют ее положение в зависимости от окна (в скине TT-simple – это маленький красно-коричневый кружочек в верхней части).
В окне с текстами песен “необходимых” картинок нет.
Переходим к эквалайзеру. В эквалайзере есть 11 полос: одна обособленная и 10 одинаковых. Каждая полоска эквалайзера подобно регулятору громкости – состоит из таких же частей (+ в эквалайзере обязательно нужна картинка, выделяющая текущую изменяемую полоску) и может быть как горизонтальной, так и вертикальной.
Мини-плеер… по сути, мини-плеер может содержать все те же объекты, что и главное окно… а фоновое изображение для мини-плеера может быть любого размера, но оно должно иметь маску.
Мини-окно текста песен также может быть любого размера… однако обычно его делают пикселей 20 в высоту, ибо на нем размещают лишь одну полоску текста.
Допустим, вы нарисовали все необходимые вам картинки.
Теперь рассмотрим, что нужно с ними делать далее…. Для начала пронумеруем все наши bmp-картинки. Делать это можно в любом порядке (начиная с 0), главное чтобы, если картинок было меньше 100, названия первых 10 чисел начинались с 0 (00, 01, … 09, 10…), а если картинок более 100, то ко всем числам меньше 100 в начале добавляйте еще один 0 (000, 001,… , 010,… , 099, 100,…). Приступаем к упаковке картинок. Открываем mbmtool и закидываем все наши картинки в него по порядку (000, 001, 002, …). Рядом с номером закинутой картинки находится ее разрешение и количество цветов, которое оно использует, и на сколько процентов картинка сжата (пишется только при открытии готового файла, а не при создании нового). Не знаю как у вас, но мой mbmtool, при добавлении в него файлов, ставит на них кол-во цветов равное 8 битам (только черно-белые цвета). Это порядком раздражает, и постоянно приходится не забывать менять цветность добавленных картинок (нажимаем “изменить цвет” и выбираем colour 16bpp). Когда все картинки закинуты, нажимаем “сохранить” и вводим название скина.
Однако если вы решите изменить скин, файл с картинками которого имеет расширение ttb, то вам понадобиться hex–редактор. Открываем ttb файл с помощью него и видим, что во второй колонке расположены какие-то числа. Нам нужно самое первое число (73 во всех скинах) поменять на 37. Далее выбираем “сохранить как” и приписываем в конце файла “.mbm” вместо “.ttb”. Теперь запускаем mbmtool, нажимаем “открыть” и выбираем наш файл. В папке, где находится ваш mbmtool.exe сразу же создается папка temp, в которой находятся все bmp картинки только что открытого файла.
Переходим к xml файлу. Можно создать новый файл, а можно просто взять уже готовый от любого скина и переделать под свой скин (этот вариант намного проще, т.к. в таком случае намного сложнее упустить какой то важный элемент и больше шансов, что скин будет (хоть как то) работать с первого раза). По сути его можно открыть любым текстовым редактором.
Итак, открываем xml файл блокнотом и начинаем творить. (Комментарии будут помечены звездочками (***))
p.s. в качестве примера мною будет рассмотрен xml файл стандартного скина tt-simple.
<?xml version=”1.0″ encoding=”UTF-8″?>
*** кодировка текста в скине (советую эту строчку не трогать)
<Theme Name=”имя_скина” Author=”Автор_скина” Ver=”версия_скина“
EMail=”е-меил” WebPage=”интернет_адрес”>
<Bitmap ID=”BackGround” File=”файл_с_картинками.mbm” />
<Font ID=”DefaultFont” FontName=”936_S60″ FontStyle=”18 0″ />
*** это так называемая шапка скина.
*** <Bitmap … .mbm” /> – в этой строке мы присваиваем идентификатору BackGround файл, указанный в кавычках. Внутри кавычек, вместо “BackGround”, может быть любое слово на англ. языке… по этому id мы будем обращаться к файлу с картинками. Почти все id можно выбирать произвольно, за исключением стандартных, обозначающих кнопки, тексты, значки и т.д. … Судя по тому, что в каждой панели указывается id используемого файла, то файлов для хранения картинок можно использовать несколько, для каждого окна свой. Также стоит заметить, что теперь не обязательно переводить mbm файлы в ttb, так как имя файла в скине указывается вместе с расширением.
*** Font ID=”DefaultFont” – идентификатор стандартного шрифта, который будет использоваться.
*** FontName=”936_S60″ – название используемого шрифта. Подключить сторонние шрифты у меня не получилось (возможно, не туда закидывал). Стандартные шрифты: 936_S60 – используется практически везде, шрифт, который используется у вас в системе как основной. ZDigi – шрифт, состоящий только из цифр (очень похож на те, что раньше использовались для отображения номера на первых советских домашних телефонах с экранами).
*** FontStyle=”18 0″ – стиль текста. Первое число – размер шрифта, второе – стиль текста (0 – обычный текст, 1 – жирный).
<View ID=”Portait”>
…
</View>
*** условно говоря, это вид отображения. Есть 2 вида - Portait – вертикальная ориентация экрана, Landscape – горизонтальная ориентация экрана (как на смартах с qwerty-клавиатурой E61, E61i, E71 и прочих, либо на смартах с возможностью поворота экрана N95, N82 и т.п., однако повернуть плеер можно на смартах с любым положением экрана, т.к. это функция плеера).
*** на месте … описываются все окна данного вида отображения. P.s. не забывайте закрывать теги (</название_тега>).
*** далее мы будем рассматривать окна вместе с объектами, которые можно на них отобразить
<View ID=”Portait”>
<Panel ID=”Common” Bitmap=”BackGround” >
*** в каждом виде отображения плеера существуют несколько идентификаторов панелей: Common – общая панель, Main – главное окно, List – плейлист, Lyric – окно с текстами песен, Equalizer – окно эквалайзера, MiniPlayer – окно мини-плеера, MiniLyric – мини-окно с текстом песни.
*** как уже было указано выше, Bitmap=”BackGround” – идентификатор файла, изображения которого будут использоваться в данном окне.
<Icon ID=”PanelBkg” Position=”0 0 240 27″ Icon=”01 02″ />
*** <Icon … /> – тег для отображения картинок. Как любой объект он имеет пункт ID. Есть несколько зарезервированных имен, которые отвечают за конкретные значки программы (AlarmIcon – значок будильника, SleepIcon – значок таймера). В каждом таком теге должны присутствовать следующие пункты:
1) Position=”0 300 240 20″ – положение картинки на экране. Первое число обозначает отступ слева, второе- отступ сверху, третье – ширина картинки, четвертое – высота картинки.
2) Icon=”07 08″ – первое число – номер изображения в нашем файле, которое мы хотим увидеть в указанном месте, второе число – номер маски к этому изображению в том же файле.
*** Также, в каждом таком теге могут присутствовать и некоторые “необязательные пункты”:
1) Visible=”0″ – видна ли данная картинка при обычном проигрывании (0 – не видна, 1 – видна). Обычно этот элемент используется, если данное изображение участвует в событии (event), как, например, выплывающие кнопки при нажатии на паузу. Данный пункт используется в связке с пунктами 2, 3, 4 (может и не быть), 5, 6. Пункты 1, 2, 3, 5 и 6 друг без друга употребляться не должны.
2) DelayTime=”100″ – задержка. Особой разницы при изменении значения данного пункта не заметил, поэтому не могу сказать, за что именно он отвечает. Также не могу сказать, в чем измеряют время китайцы, ибо ни на секунды, ни на мс данные значения не тянут.
3) WaitTime=”800″ – время ожидания. Спустя данное время после некоего действия (нажатие на кнопку и проч.) объект начнет движение.
4) EffectFrom=”-16 136″ – точка в плоскости, с которой объект появляется при конкретном событии (первое число – позиция по горизонтали, второе число – по вертикали). Примечательно, что объект может появляться далеко из-за пределов экрана. Данный пункт может и не присутствовать, если объект участвует в событии.
5) OutTime=”500″ – скорость удаления (исчезновение) объекта или за какое время объект возвращается на место, с которого появился.
6) InTime=”300″ – скорость появления объекта или за какое время объект “выезжает” на экран с того места, которое указано в пункте 4.
7) ” ZOrder=”1″ – этот пункт может быть у любого объекта, но я так и не понял, для чего он нужен.
*** как пример таких картинок:
<Icon ID=”BottomBkg” Position=”0 300 240 20″ Icon=”07 08″ />
<Icon ID=”AlarmIcon” Position=”203 2 13 15″ Icon=”13 18″ ZOrder=”1″ />
<Icon ID=”CtrolBkg” Position=”66 86 108 108″ Icon=”36 37″ Visible=”0″ DelayTime=”100″ WaitTime=”800″ OutTime=”500″ InTime=”300″ ZOrder=”5″ />
<RepeatIcon ID=”RepeatIcon” Position=”184 1 13 15″ RepeatListIcon=”13 14″ RepeatSingleIcon=”13 15″ RepeatNormalIcon=”13 16″ RepeatRandomIcon=”13 17″ ZOrder=”1″ />
*** Объект, служащий для отображения картинок режимов воспроизведения (повтор, рандом,…). У этого тега своё зарезервированное имя и идентификатор (RepeatIcon ID=”RepeatIcon“) менять которые нельзя. Помимо стандартного для всех объектов пункта Position, данный объект содержит еще 4 пункта (по одному на режим воспроизведения):
RepeatListIcon=”13 14″ – номера иконок повтора плейлиста и маски к ней
RepeatSingleIcon=”13 15″ – повтора песни и маски к ней
RepeatNormalIcon=”13 16″ – по порядку и маски к ней
RepeatRandomIcon=”13 17″ – случайного воспроизведение и маски к ней
<Button ID=”PlayPauseButton” Position=”114 131 15 18″ NormalIcon2=”21 24 21 23″ PressedIcon2=”22 24 22 23″ Visible=”0″ DelayTime=”100″ WaitTime=”800″ OutTime=”500″ InTime=”300″ ZOrder=”6″ />
*** Еще один тег, который используется только для отображения стандартных объектов – тег кнопка. Кнопок всего может быть до 5:
1) PlayPauseButton – воспроизв./пауза. Имеет стандартный пункт Position, пункт NormalIcon2=”21 24 21 23″ (первые два числа – иконка и маска к ней состояния “пауза”, два последних числа – к состоянию “воспроизведение”), PressedIcon2=”22 24 22 23″ (те же иконки (пауза и воспроизв. соответственно), но в нажатом состоянии)
2) “PrevSongRewindButton – переход к предыдущ.треку. Имеет стандартный пункт Position, а также NormalIcon=”25 27″ PressedIcon=”26 27″ – иконка с маской для обычного и нажатого состояния соответственно.
3) NextSongForwardButton – переход к следующему треку. Аналогично пункту 2.
4) VolumeUpButton – кнопка увеличения громкости. Аналогично пункту 2.
5) VolumeDownButton – кнопка уменьшения громкости. Аналогично пункту 2.
*** Также, каждая из этих кнопок может иметь “необязательные пункты” из тега для отображения картинок.
<Button ID=”PrevSongRewindButton” Position=”77 136 16 9″ NormalIcon=”25 27″ PressedIcon=”26 27″ Visible=”0″ EffectFrom=”-16 136″ DelayTime=”100″ WaitTime=”800″ OutTime=”500″ InTime=”300″ ZOrder=”6″ />
<Button ID=”NextSongForwardButton” Position=”147 136 16 9″ NormalIcon=”25 28″ PressedIcon=”26 28″ Visible=”0″ EffectFrom=”240 136″ DelayTime=”100″ WaitTime=”800″ OutTime=”500″ InTime=”300″ ZOrder=”6″ />
<Button ID=”VolumeUpButton” Position=”115 100 11 10″ NormalIcon=”29 31″ PressedIcon=”30 31″ Visible=”0″ EffectFrom=”115 -10″ DelayTime=”100″ WaitTime=”800″ OutTime=”500″ InTime=”300″ ZOrder=”6″ />
<Button ID=”VolumeDownButton” Position=”115 172 11 10″ NormalIcon=”29 32″ PressedIcon=”30 32″ Visible=”0″ EffectFrom=”115 320″ DelayTime=”100″ WaitTime=”800″ OutTime=”500″ InTime=”300″ ZOrder=”6″ />
<Event ID=”Play” CtrolBkg=”ShowWait” PlayPauseButton=”ShowWait” PrevSongRewindButton=”ShowWaitOut” NextSongForwardButton=”ShowWaitOut” VolumeUpButton=”ShowWaitOut” VolumeDownButton=”ShowWaitOut” />
*** <Event … /> – событие. Есть 10 стандартных событий:
1) Play – начало воспроизведения (после паузы либо при включение плеера)
2) Pause – приостановление воспроизведения
3) PrevSongRewind – прокрутка песни назад или переход на предыдущую песню
4) NextSongForward – прокрутка песни вперед или переход на следующую песню
5) VolumeUp – увеличение громкости
6) VolumeDown – уменьшение громкости
7) ControlOn – включение режима отображения кнопок ( нажатие на зеленую кнопку)
ControlOff – выключение режима отображения кнопок (повторное нажатие)
9) FastForward – прокрутка файла вперед (удерживание клавиши 6)
10) Rewind – прокрутка файла назад (удерживание клавиши 4).
*** Каждое из таких событий имеет произвольное количество пунктов. Пунктами становятся идентификаторы объектов, в которых вы прописали “необязательные пункты”, такие как EffectFrom, DelayTime, WaitTime, OutTime, InTime и проч. Каждый пункт данного тега может иметь одно из следующий значений:
1) Show – объект будет просто показан
2) ShowWait – объект будет показан и через время, указанное в его пункте WaitTime исчезнет
3) ShowWaitOut – аналогично предыдущему, но объект “уплывет” через указанное время (используется, если у объекта имелся пункт EffectFrom)
4) In – объект “вплывет” на свое положение и останется там до следующего действия (используется, если у объекта имелся пункт EffectFrom)
5) Out – объект “уплывет” со своего предыдущего положения (используется, если у объекта имелся пункт EffectFrom)
6) Hide – объект исчезает сразу после совершения действия.
***Стоит отметить, что события можно не использовать вообще или использовать,но не все. Просто не прописывайте их и можно спокойно делать скины как на прошлые версии плеера.
<Event ID=”Pause” CtrolBkg=”Show” PlayPauseButton=”Show” PrevSongRewindButton=”Show” NextSongForwardButton=”Show” VolumeUpButton=”Show” VolumeDownButton=”Show” />
<Event ID=”PrevSongRewind” CtrolBkg=”ShowWait” PlayPauseButton=”ShowWait” PrevSongRewindButton=”ShowWaitOut” NextSongForwardButton=”ShowWaitOut” VolumeUpButton=”ShowWaitOut” VolumeDownButton=”ShowWaitOut” />
<Event ID=”NextSongForward” CtrolBkg=”ShowWait” PlayPauseButton=”ShowWait” PrevSongRewindButton=”ShowWaitOut” NextSongForwardButton=”ShowWaitOut” VolumeUpButton=”ShowWaitOut” VolumeDownButton=”ShowWaitOut” />
<Slide ID=”Volume” Position=”221 87 7 123″ SlideIcon=”40 41″ Style=”Vertical” Visible=”0″ EffectFrom=”246 87″ DelayTime=”100″ WaitTime=”800″ OutTime=”500″ InTime=”300″ ZOrder=”6″ />
*** <Slide … /> – так сказать слайдер или ползунок. Используется для отображения текущего прогресса воспроизведения и громкости (им соответствуют идентификаторы Guage и Volume соответственно). Помимо стандартного Position эти объекты имеют пункты Style – вид ползунка (Vertical – вертикальный, Horiz – горизонтальный), должны иметь один из пунктов (или сразу оба) KnobIcon=”09 10″ (для отображения курсора, в кавычках его порядковый номер и номер маски) и SlideIcon=”40 41″ (для отображения открываемого индикатора, в кавычках его порядковый номер и номер маски к нему), а также могут иметь “необязательные пункты”.
<Icon ID=”VolumeBkg” Position=”215 75 19 146″ Icon=”38 39″ Visible=”0″ EffectFrom=”240 75″ DelayTime=”100″ WaitTime=”800″ OutTime=”500″ InTime=”300″ ZOrder=”5″ />
<Event ID=”VolumeUp” Volume=”ShowWaitOut” VolumeBkg=”ShowWaitOut” CtrolBkg=”ShowWait” PlayPauseButton=”ShowWait” PrevSongRewindButton=”ShowWaitOut” NextSongForwardButton=”ShowWaitOut” VolumeUpButton=”ShowWaitOut” VolumeDownButton=”ShowWaitOut” />
<Event ID=”VolumeDown” Volume=”ShowWaitOut” VolumeBkg=”ShowWaitOut” CtrolBkg=”ShowWait” PlayPauseButton=”ShowWait” PrevSongRewindButton=”ShowWaitOut” NextSongForwardButton=”ShowWaitOut” VolumeUpButton=”ShowWaitOut” VolumeDownButton=”ShowWaitOut” />
<Event ID=”ControlOn” CtrolBkg=”Show” PlayPauseButton=”Show” PrevSongRewindButton=”In” NextSongForwardButton=”In” VolumeUpButton=”In” VolumeDownButton=”In” />
<Event ID=”ControlOff” CtrolBkg=”Hide” PlayPauseButton=”Hide” PrevSongRewindButton=”Out” NextSongForwardButton=”Out” VolumeUpButton=”Out” VolumeDownButton=”Out” />
<Text ID=”SoftKeyLeft” Position=”3 302 40 18″ FontColor=”190 190 190″ ZOrder=”2″ />
*** <Text … /> – тег для отображения текста. Эта может быть информация о песне или просто надписи “опции” или скажем “выйти”. Есть 3 “информационных” надписи:
1) SoftKeyLeft – надпись , обозначающая функцию левой софт-клавиши
2) SoftKeyRight – правой софт-клавиши
3) StatusBar – здесь можно увидеть надоедающую многим информацию о горячих клавишах, о том, что соединение разорвано и проч…
*** Если вы не хотите, чтоб эти объекты портили вам весь вид, просто отведите для них область, размером 1 на 1 или 0 на 0.
*** у объекта типа “Текст” есть несколько основных пунктов – наш любимый Position, FontColor=”190 190 190″ – цвет текста (3 числа – это цвет текста в формате rgb – красный зеленый синий, изменяются от 0 до 255 каждый), а также пара дополнительных – FontName=”936_S60″ (здесь можно указать шрифт текста, если он отличается от описанного нами стандартного), FontStyle=”14 0″ (стиль текста, если он отличается от стандартного) и Align=”Left” – выравнивание (Left – левое, Right – правое, Center – по центру)
<Text ID=”SoftKeyRight” Position=”197 302 40 18″ FontColor=”190 190 190″ ZOrder=”2″ />
<Text ID=”StatusBar” Position=”43 302 154 18″ FontColor=”180 180 180″ ZOrder=”2″ />
<MenuBar ID=”Menu” Position=”4 298 235 298″ FontColor=”60 60 60″ FontColorSelected=”60 60 60″ BarColor=”185 205 220″ BarColorSelected=”199 207 71″ Alpha=”98″ />
*** объект типа меню. Из особенностей: FontColor=”60 60 60″ – цвет шрифта, FontColorSelected=”60 60 60″ – цвет выделенного шрифта, BarColor=”185 205 220″ – цвет меню, BarColorSelected=”199 207 71″ – цвет выделения, Alpha=”98″ – непрозрачность в процентах.
</Panel>
<Panel ID=”Main” Bitmap=”BackGround” BkgIndex=”0″ ScrollPosition=”0 19 240 281″ Position=”0 0 240 320″>
*** главное окно. BkgIndex=”0″ – номер изображения, которое служит задним фоном, ScrollPosition=”0 19 240 281″ – часть экрана, которая будет двигаться при смене окна, Position=”0 0 240 320″ – позиция для заднего фона.
*** если вы хотите, чтоб какие-нибудь из событий, описанных в общей части не показывались в данном окне или показывались, но по-другому, то стоит их описать в данном окне заново.
<Icon ID=”PanelIcon” Position=”6 3 12 12″ Icon=”11 12″ ZOrder=”1″ />
<ImageDigits ID=”PlayedDigits” Position=”2 23 40 11″ Bitmaps=”92 14″ Masks=”106 14″ />
<ImageDigits ID=”TotalDigits” Position=”199 23 40 11″ Bitmaps=”92 14″ Masks=”106 14″ />
*** <ImageDigits … /> – тег для отображения рисованных цифр. Их можно использовать для отображения текущего времени воспроизведения (PlayedDigits) и общего времени песни (TotalDigits). Помимо стандартной Position тег должен иметь пункты Bitmaps=”92 14″ (собственно картинки цифр, они должны идти по порядку, начиная с 0 до 9 и еще 4 картинки для отображения двоеточия между минутами и секундами, первое число – с какой картинки в файле начинаются цифры, а второе – количество цифр, их обязательно должно быть 14, меньше выставить не получается) и Masks=”106 14″ (данный пункт аналогичен предыдущему, только данные цифры должны указывать на маски к указанным в предыдущем пункте картинкам). Однако для отображения текущей позиции или длины песни можно использовать и текст, но об этом позже.
<Icon ID=”GuageBkg” Position=”41 19 159 24″ Icon=”03 04″ ZOrder=”1″ />
<Slide ID=”Guage” Position=”53 23 135 8″ KnobIcon=”09 10″ Style=”Horiz” ZOrder=”2″ />
*** ползунок для отображения текущей позиции песни (описан выше).
<Analyzer ID=”Visualization” Position=”1 70 238 155″ BarColorTop=”130 147 169″ BarColorBot=”80 100 120″ BarNum=”24″ BarWidth=”6″ BarHBlank=”3″ BarXOffset=”11″ />
*** <Analyzer … /> – визуализация. Визуализация скина бывает 2х типов – рисованная вами и просто заданная некоторыми значениями. Рассмотрим для начала первую.
*** Нарисованная вами картинка для визуализации должна состоять из одной полоски, 2 верхних пикселя которой будут прыгать. Такой тип визуализации имеет свои пункты BarIcon=”56 57″ (собственно номер этой вашей полоски в файле с картинками и маски к ней) и BarNum=”22″ (количество этих полосок, которое вы хотели бы видеть в своем скине).
*** Второй тип визуализации содержит немного больше пунктов. BarColorTop=”130 147 169″ – основной цвет полосок визуализации, BarColorBot=”80 100 120″ – цвет верхний двух пикселей, BarNum=”24″ – количество полосок, BarWidth=”6″ – толщина этих полосок, BarHBlank=”3″ – расстояние между полосками, BarXOffset=”11″ – понятия не имею что это такое, а если вы хотите, чтоб визуализация у вас была зеркальная, то еще стоит добавить BarColorFade=”70 74 82″ – цвет полосок в зеркальном отражении, Reflect=”1″ – использовать ли зеркалную визуализацию (0 – не использовать, 1 – использовать).
<Text ID=”ScrollInfo” Position=”3 42 177 18″ FontColor=”70 70 70″ Header=”1″ VScroll=”1″ Align=”Left” />
*** <Text … /> – описанный нами ранее тег для отображения текста. Все описанные выше пункты подходят и для текста, несущего информацию конкретно о песне, за исключением некоторых особенных пунктов: Header=”1″ (отображение или нет пояснения перед текстом… ну в общем говоря, писать ли исполн., песня и проч. или просто писать названия ( 1 – отображать пояснения, 0 – не отображать)), VScroll=”1″ (вертикальная прокрутка. 0 – выключить, 1 – включить. Если включить, то информация будет сменяться прокручиваясь вверх, а если выключить, то просто будет мгновенно меняться… надеюсь, вы поняли).
*** Какие текстовые объекты бывают:
1) ScrollInfo – все и сразу… вся информация о текущей песне плюс следующая песня в одном поле
2) ListIndex – номер песни в плейлисте/всего песен в плейлисте
3) Played – текущее время воспроизведения песни (как замена рисованным цифрам)
4) Duration – длина песни (как замена рисованным цифрам)
5) Clock – текущее время
6) Title – название песни
7) Artist – исполнитель
Album – альбом
9) Genre – жанр
10) ExtName – формат файла
<Text ID=”ListIndex” Position=”180 42 57 18″ FontColor=”70 70 70″ VScroll=”1″ Align=”Right” />
<Icon ID=”lrcBkg” Position=”0 234 240 66″ Icon=”05 06″ Visible=”1″/>
<LyricShow ID=”LyricShow” Position=”0 236 240 64″ FontName=”936_S60″ FontStyle=”16 0″ FontColor=”190 190 190″ FontNameSelected=”936_S60″ FontStyleSelected=”16 1″ FontColorSelected=”210 210 210″ ZOrder=”1″ />
*** <LyricShow … /> – отображение текста песни. Имеет стандартный пункт Position (последние две цифры указывают, на какой площади будет располагаться текст), FontName=”936_S60″ – название используемого шрифта, FontStyle=”16 0″ – все тот же стиль текста, FontColor=”190 190 190″ – цвет текста, FontNameSelected=”936_S60″ – шрифт для выделяемого текста, FontStyleSelected=”16 1″ – стиль выделяемого текста, FontColorSelected=”210 210 210″ – цвет выделяемого текста. Также можно добавить BarColorSelected=”210 210 210″ – цвет выделения для текущей строчки.
</Panel>
<Panel ID=”List” Bitmap=”BackGround” BkgIndex=”0″ ScrollPosition=”0 19 240 281″ Position=”0 0 240 320″ >
*** окно плейлиста.
<Icon ID=”PanelIcon” Position=”27 3 12 12″ Icon=”11 12″ ZOrder=”3″ />
<ListIcon ID=”SongIcon” Icon=”79 80″ />
*** <ListIcon … /> – тег для обозначения мелких значков в плейлисте. У них есть лишь пункт Icon=”79 81″ – картинка для объекта и маска к ней. Всего должно быть 9 таких объектов (если вы пропустите хотя бы 1, то скин работать не будет):
1) SongIcon – иконка для отображения песен в плейлисте
2) AlbumIcon – для отображения альбомов в разделе “категории песен”
3) ArtistIcon – для отображения исполнителей в том же разделе
4) GenreIcon – для отображения жанра песен во все том же разделе
5) FolderIcon – для отображения папок во все том же разделе
6) FileIcon – для отображения файлов
7) BackIcon – самая первая иконка в каждом плейлисте – возврат на уровень выше
PlayingIcon – значок проигрываемого файла
9) PausedIcon – значок приостановленного файла
<ListIcon ID=”AlbumIcon” Icon=”79 81″ />
<ListIcon ID=”ArtistIcon” Icon=”79 82″ />
<ListIcon ID=”GenreIcon” Icon=”79 83″ />
<ListIcon ID=”FolderIcon” Icon=”79 84″ />
<ListIcon ID=”FileIcon” Icon=”79 80″ />
<ListIcon ID=”BackIcon” Icon=”79 85″ />
<ListIcon ID=”PlayingIcon” Icon=”76 77″ />
<ListIcon ID=”PausedIcon” Icon=”76 78″ />
<ListBox ID=”ListBox” Position=”3 30 234 262″ FontColor=”70 70 70″ FontColorSelected=”235 235 235″ BarIconselected=”42 43″ DurationVisible=”0″ DurationColor=”238 238 230″ />
*** <ListBox … /> – тег, необходимый для отображения плейлиста. В Position указываем начальную точку и область, на которой будет отображаться плейлист. FontColor=”70 70 70″ – цвет песен, FontColorSelected=”235 235 235″ – цвет выделенной песни, BarIconselected=”42 43″ – картинка, служащая выделением (и, конечно же, маска к ней), DurationVisible=”0″ – отображать ли справа от песни ее длину (0 – не отображать, 1 – отображать), DurationColor=”238 238 230″ – цвет, используемый для отображения длины песни. Вместо BarIconselected можно использовать BarColorSelected=”235 235 235″ – цвет выделения.
<Icon ID=”ListBkg” Position=”66 1 171 72″ Icon=”44 45″ Visible=”0″ DelayTime=”100″ WaitTime=”5000″ OutTime=”500″ InTime=”300″ ZOrder=”3″ />
<TipText ID=”TipTitle” Position=”113 5 121 14″ FontName=”936_S60″ FontStyle=”14 0″ FontColor=”225 225 225″ Align=”Left” Visible=”0″ DelayTime=”100″ WaitTime=”5000″ OutTime=”500″ InTime=”300″ ZOrder=”4″ />
*** <TipText … /> тот же самый текст с информацией о файле и теми же пунктами (только ко всем идентификаторам добавляется Tip (TipTitle, TipGenre,…) и использовать можно лишь инфо под номерами 4, 6-10). Однако данный текст может иметь эффекты (т.е. участвовать в событиях), значит должен иметь “необязательные пункты” от тегов для отображения картинок (DelayTime, WaitTime, OutTime, InTime). Однако стоить заметить, что в Position первые два числа указывают отступ не от точки (0;0), а от выбранной песни в плейлисте (это распространяется и на картинки, участвующие в событии плейлиста).
<TipText ID=”TipArtist” Position=”113 23 121 14″ FontName=”936_S60″ FontStyle=”14 0″ FontColor=”225 225 225″ Align=”Left” Visible=”0″ DelayTime=”100″ WaitTime=”5000″ OutTime=”500″ InTime=”300″ ZOrder=”4″ />
<TipText ID=”TipAlbum” Position=”113 41 121 14″ FontName=”936_S60″ FontStyle=”14 0″ FontColor=”225 225 225″ Align=”Left” Visible=”0″ DelayTime=”100″ WaitTime=”5000″ OutTime=”500″ InTime=”300″ ZOrder=”4″ />
<TipText ID=”TipDuration” Position=”113 57 50 14″ FontName=”936_S60″ FontStyle=”14 0″ FontColor=”225 225 225″ Align=”Left” Visible=”0″ DelayTime=”100″ WaitTime=”5000″ OutTime=”500″ InTime=”300″ ZOrder=”4″ />
<TipText ID=”TipExtName” Position=”155 57 30 14″ FontName=”936_S60″ FontStyle=”14 0″ FontColor=”225 225 225″ Align=”Left” Visible=”0″ DelayTime=”100″ WaitTime=”5000″ OutTime=”500″ InTime=”300″ ZOrder=”4″ />
<TipText ID=”TipGenre” Position=”186 57 50 14″ FontName=”936_S60″ FontStyle=”14 0″ FontColor=”225 225 225″ Align=”Center” Visible=”0″ DelayTime=”100″ WaitTime=”5000″ OutTime=”500″ InTime=”300″ ZOrder=”4″ />
<Event ID=”ListTip” ListBkg=”ShowWait” TipTitle=”ShowWait” TipArtist=”ShowWait” TipAlbum=”ShowWait” TipDuration=”ShowWait” TipExtName=”ShowWait” TipGenre=”ShowWait” />
*** собственно еще одно событие. Оно отвечает за всплывающее окошко информации о файле.
<ImageDigits ID=”PlayedDigits” Position=”2 23 40 11″ Bitmaps=”92 14″ Masks=”106 14″ Visible=”0″ WaitTime=”1000″ OutTime=”500″ InTime=”300″ ZOrder=”1″ />
<ImageDigits ID=”TotalDigits” Position=”199 23 40 11″ Bitmaps=”92 14″ Masks=”106 14″ Visible=”0″ WaitTime=”1000″ OutTime=”500″ InTime=”300″ ZOrder=”1″ />
<Icon ID=”GuageBkg” Position=”41 19 159 24″ Icon=”03 04″ Visible=”0″ DelayTime=”100″ WaitTime=”1000″ OutTime=”500″ InTime=”300″ ZOrder=”1″ />
<Slide ID=”Guage” Position=”53 23 135 8″ KnobIcon=”09 10″ Visible=”0″ DelayTime=”100″ WaitTime=”1000″ OutTime=”500″ InTime=”300″ Style=”Horiz” ZOrder=”2″ />
<Event ID=”FastForward” Guage=”ShowWait” GuageBkg=”ShowWait” PlayedDigits=”ShowWait” TotalDigits=”ShowWait” />
<Event ID=”Rewind” Guage=”ShowWait” GuageBkg=”ShowWait” PlayedDigits=”ShowWait” TotalDigits=”ShowWait” />
<Event ID=”Play” />
*** пустое событие нужно для обнуления события, описанного в общей части. То есть при воспроизведении ничего не будет появляться, всплывать и проч.
<Event ID=”Pause” />
<Event ID=”PrevSongRewind” />
<Event ID=”NextSongForward” />
</Panel>
<Panel ID=”Lyric” Bitmap=”BackGround” BkgIndex=”0″ ScrollPosition=”0 19 240 281″ Position=”0 0 240 320″ >
*** окно текста песен.
<Icon ID=”PanelIcon” Position=”47 3 12 12″ Icon=”11 12″ ZOrder=”1″ />
<LyricShow ID=”LyricShow” Position=”3 22 234 277″ FontColor=”70 70 70″ FontNameSelected=”936_S60″ FontStyleSelected=”16 0″ FontColorSelected=”185 122 83″ />
*** описано выше, в главном окне. Все то же самое, только места для текста больше.
<ImageDigits ID=”PlayedDigits” Position=”2 23 40 11″ Bitmaps=”92 14″ Masks=”106 14″ Visible=”0″ WaitTime=”1000″ OutTime=”500″ InTime=”300″ ZOrder=”1″ />
<ImageDigits ID=”TotalDigits” Position=”199 23 40 11″ Bitmaps=”92 14″ Masks=”106 14″ Visible=”0″ WaitTime=”1000″ OutTime=”500″ InTime=”300″ ZOrder=”1″ />
<Icon ID=”GuageBkg” Position=”41 19 159 24″ Icon=”03 04″ Visible=”0″ DelayTime=”100″ WaitTime=”1000″ OutTime=”500″ InTime=”300″ ZOrder=”1″ />
<Slide ID=”Guage” Position=”53 23 135 8″ KnobIcon=”09 10″ Visible=”0″ DelayTime=”100″ WaitTime=”1000″ OutTime=”500″ InTime=”300″ Style=”Horiz” ZOrder=”2″ />
<Event ID=”FastForward” Guage=”ShowWait” GuageBkg=”ShowWait” PlayedDigits=”ShowWait” TotalDigits=”ShowWait” />
<Event ID=”Rewind” Guage=”ShowWait” GuageBkg=”ShowWait” PlayedDigits=”ShowWait” TotalDigits=”ShowWait” />
<Event ID=”PrevSong” CtrolBkg=”Hide” PlayPauseButton=”Hide” PrevSongRewindButton=”Hide” NextSongForwardButton=”Hide” VolumeUpButton=”Hide” VolumeDownButton=”Hide” />
*** событие при однократном нажатии на кнопку 4 (переход на предыдущую песню)
<Event ID=”NextSong” CtrolBkg=”Hide” PlayPauseButton=”Hide” PrevSongRewindButton=”Hide” NextSongForwardButton=”Hide” VolumeUpButton=”Hide” VolumeDownButton=”Hide” />
*** событие при однократном нажатии на кнопку 6 (переход на след.песню)
<Event ID=”PrevSongRewind” />
<Event ID=”NextSongForward” />
</Panel>
<Panel ID=”Equalizer” Bitmap=”BackGround” BkgIndex=”0″ ScrollPosition=”0 0 240 320″ Position=”0 0 240 320″ >
*** окно эквалайзера
<Slide ID=”Gain” Position=”10 69 12 179″ KnobIcon=”51 52″ FocusIcon=”49 50″ BkgIcon=”48 50″ Style=”Vertical” />
*** один из двух особых “ползунков” эквалайзера. Обозначает самую первую (так сказать, нулевую), отдельную полоску эквалайзера. Имеет те же пункты, что и громкость, однако имеется еще один необходимый пункт – FocusIcon=”49 50″ – выделение текущей полосы эквалайзера (точнее задний фон для нее).
<Slide ID=”EQ” FirstPosition=”48 69 12 179″ Interval=”19″ KnobIcon=”51 52″ FocusIcon=”49 50″ BkgIcon=”48 50″ Style=”Vertical” />
*** второй особый ползунок эквалайзера. Имеет все те же пункты, что и предыдущий элемент (кроме Position), + FirstPosition=”48 69 12 179″ – позиция первой из 10 полосок эквалайзера, Interval=”19″ – расстояние между полосками.
<Icon ID=”NUM1″ Position=”14 253 213 7″ Icon=”53 54″ />
<Icon ID=”NUM2″ Position=”25 70 13 176″ Icon=”55 56″ />
<ImageDigits ID=”PlayedDigits” Position=”2 23 40 11″ Bitmaps=”92 14″ Masks=”106 14″ Visible=”0″ WaitTime=”1000″ OutTime=”500″ InTime=”300″ ZOrder=”1″ />
<ImageDigits ID=”TotalDigits” Position=”199 23 40 11″ Bitmaps=”92 14″ Masks=”106 14″ Visible=”0″ WaitTime=”1000″ OutTime=”500″ InTime=”300″ ZOrder=”1″ />
<Icon ID=”GuageBkg” Position=”41 19 159 24″ Icon=”03 04″ Visible=”0″ DelayTime=”100″ WaitTime=”1000″ OutTime=”500″ InTime=”300″ ZOrder=”1″ />
<Slide ID=”Guage” Position=”53 23 135 8″ KnobIcon=”09 10″ Visible=”0″ DelayTime=”100″ WaitTime=”1000″ OutTime=”500″ InTime=”300″ Style=”Horiz” ZOrder=”2″ />
<Event ID=”FastForward” Guage=”ShowWait” GuageBkg=”ShowWait” PlayedDigits=”ShowWait” TotalDigits=”ShowWait” />
<Event ID=”Rewind” Guage=”ShowWait” GuageBkg=”ShowWait” PlayedDigits=”ShowWait” TotalDigits=”ShowWait” />
<Event ID=”Play” />
<Event ID=”Pause” />
<Event ID=”PrevSongRewind” />
<Event ID=”NextSongForward” />
</Panel>
<Panel ID=”MiniPlayer” Bitmap=”BackGround” BkgIndex=”46″ BkgMaskIndex=”47″ Position=”10 205 221 76″ >
*** Окно мини-плеера. Из особенностей – BkgMaskIndex=”47″ – маска для заднего фона (для надежности нужно иметь две маски для заднего фона мини-плеера – обычную и противоположную).
*** Могут использоваться все те объекты, что и в главном окне (кроме событий) + можно добавить новые. В пункте Position объектов указывается отступ от верхней левой точки фоновой картинки.
<Text ID=”Title” Position=”76 14 138 20″ FontColor=”70 70 70″ />
<LyricShow ID=”LyricShow” Position=”76 40 139 18″ FontColor=”70 70 70″ FontColorSelected=”185 122 83″ />
<ImageDigits ID=”PlayedDigits” Position=”18 18 40 11″ Bitmaps=”92 14″ Masks=”106 14″ />
<ImageDigits ID=”TotalDigits” Position=”18 44 40 11″ Bitmaps=”92 14″ Masks=”106 14″ />
<Slide ID=”Guage” Position=”76 31 140 11″ KnobIcon=”90 91″ Style=”Horiz” ZOrder=”1″ />
</Panel>
<Panel ID=”MiniLyric” Bitmap=”BackGround” BkgIndex=”120″ Position=”12 1 216 20″ >
*** мини-окно с текстом песен. В пункте Position единственного элемента (текс песни) указывается отступ от верхней левой точки фоновой картинки.
<LyricShow ID=”LyricShow” Position=”2 2 212 17″ FontColor=”70 70 70″ FontColorSelected=”185 122 83″ />
</Panel>
</View>
*** на этом мы закончили скин для горизонтальной ориентации экрана
<View ID=”Landscape”>
***всё то же самое, но для другой ориентации экранов.
</View>
</Theme>
*** xml файл скина закончен (хотелось бы так думать), сохраняем и закрываем.
Теперь, по заранее составленному плану, вы можете расположить элементы в вашем скине так, как вам хочется. Главное помнить, что ссылаться можно только на добавленные картинки (если последняя картинка 099, то, ясно дело, обращаться к 100ой бессмысленно). Итак, когда вы составили черновую версию xml файла (именно черновую, т.к. скины с первого раза не делаются), скидываем оба файла (или, возможно, их окажется больше) на телефон. Скины в плеере лежат по пути !:ttpod\skin\v4 , где !- название диска, на котором установлен плеер. Далее запускаем плеер, выбираем нужный скин и смотрим, все ли нас устраивает. Ясен пень, с первого раза ни у кого все точно угадать не получится, т.к. на телефоне все смотрится совсем по-другому, так что доводите свои скины до ума и, если посчитаете нужным, выкладывайте их в интернет.
Сплеши, кстати, делаются очень просто. В mbm файл закидывается изображение вашего разрешения (или 2, если хотите, чтоб он выглядел хорошо в обеих ориентациях экрана) и по известной вам уже схеме переделывайте формат файла в ttb (точнее по способу, обратному тому, что я описывал), называйте его Splash.ttb и в папку !:ttpod\splash.
И в заключении…. Возможно некоторые посчитают нужным выложить данный мануал на других сайтах, так что я не против, лишь бы не забывали указывать автора (меня).
С уважением, Histler.
1) Фотошоп не обязателен. Если вы им владеете - это прекрасно, а так можно использовать бесплатный аналог GIMP.
2) Я пакую картинки в *mbm, затем можно оставить так (не забыв указать расширение файла в xml-файле), или в простом X-Plore поменять расширение *mbm на *ttb. Hex-редактор мне ни разу не понадобился. Редактировать xml-файл на смарте можно с помощью DeDit.
3) Автор статьи не в курсе, для чего нужен параметр ZOrder в тэгах. А я знаю: если по вашей идее обложка должна быть поверх чего-нибудь, этот параметр определяет номер слоя (типа какой выше, какой ниже).
4) Можно делать и противоположные маски. Такие используются в стандартных скинах. Но при упаковке в MBMToolе надо указать качество 8 бит.
5) Кстати о мини плеере. Простой способ (создание картинки и тупо маски к ней не сработает), плеер будет выглядеть как бы рваным. Для этого делаем следующее:
- <Panel ID="MiniPlayer" Bitmap="BackGround" BkgIndex="1" BkgMaskIndex="104" Position="5 198 217 65">, где 1- пустая картинка нужного размера, а 104 маска чтобы было прозрачное все.
- <Icon ID="panelBkg" Position="0 0 217 65" Icon="009 008" ZOrder="1" /> ,где 009 нужная картинка а 008 ее маска.
6) И последнее. Не бойтесь экспериментировать! Возможности TTPod позвволяют делать красивые анимации в скинах (как пример: крутящийся диско шарик, грампластинка и т.п.).
Еще одна важная инфа. Случается такое: в сторонних скинах плеер постоянно хочет в нэт загрузить обложку, даже если в настройках загрузка обложек отключена. Лечится это следующим образом
(читаем внимательно!):
1)Скидываем файл нужного скина с расширением .xml из !:TTPod\skin\v4 , где ! - диск, куда установлен плеер, на комп.
2) Открываем файл обычным блокнотом. Видим теги. Много тегов. Внимательно ищем тег AlbumSpinBanner и удаляем его от начала до конца (< - начало тега, /> - конец). Теги ниже поднимаем (типа абзац, где был удаленный тег, удаляем). Их таких тегов 2: для портретного и ландшафтного режима плеера. 2 тоже ищем ниже!
3) Сохраняем и закидываем файл обратно в смарт, согласившись на замену.
4) Один побочный эффект: исчезают квадратики в центре, так называемые ячейки для обложек. Но я так понимаю, обложки вам нафиг нужны, как и мне тоже, только бабосы тратить! :fellow:
5)Все! Мы отучили скин от нэта! :wink:
В разных скинах тег может называться по-разному. Второй вариант: AlbumCover.
И еще кое-что: никогда не редактируйте xml-файл скина иксплором! Скин не будет включаться вообще! На смарте это можно делать при помощи проги DEdit от Юрия Бакунина!
Как только на сайте откроется обмен, залью свои скины.