Збери котів в Android 7 Nougat (не тільки)

Затяті фанати Android знають, що в системі ховаються пасхалки. Не стала винятком і сьома версія під назвою Nougat. У ній можна активувати гру по збору котів. Вам потрібно зрідка класти в порожню миску частування і ловити прийшов кота.
Сам процес активації пасхалки докладно описаний в блог. Тут я розповім, що знаходиться під капотом.

У грі коти з'являються з тризначними числами. Теоретично котів може бути 1000 штук від 000 до 999 (насправді немає, у програмі використовується інший алгоритм, але для нас це не принципово).
Мені стало цікаво, як вони зберігаються в додатку. Пошук в інтернеті привів мене на ресурс, де викладені исходники великоднього яйця Easter Egg.
Пізніше на Гітхабі я знайшов модифікований код, який дозволяє запускати гру як звичайний додаток на будь-якому пристрої, а не тільки на Android 7 — https://github.com/Abhinav1997/NekoCollector. Зібрану версію з цих джерел можна знайти Google Play за ключовими словами Neko Collector.
Другий приклад зручніше вивчати, так як там немає зайвого коду для активації пасхалки, який нам ні до чого.
Було не важко здогадатися, що основна магія відбувається в класі Cat.

Вуса, лапи, хвіст — ось мої документи
Виявилося, що коти не зберігаються в додатку у вигляді окремих картинок. Цілком зрозуміло, велика кількість зображень роздує програму. В папці drawable у вигляді векторних ресурсів зберігаються окремі частини кота. Наприклад, так зберігається хвіст у файлі tail.xml.

Аналогічним чином зберігаються лапи, очі, тулуб, нашийник, бантик і т. д.
А потім все це збирається в конструкторі внутрішнього класу CatParts

CatParts(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
body = context.getDrawable(R. drawable.body);
head = context.getDrawable(R. drawable.head);
leg1 = context.getDrawable(R. drawable.leg1);
leg2 = context.getDrawable(R. drawable.leg2);
leg3 = context.getDrawable(R. drawable.leg3);
leg4 = context.getDrawable(R. drawable.leg4);
tail = context.getDrawable(R. drawable.tail);
leftEar = context.getDrawable(R. drawable.left_ear);
rightEar = context.getDrawable(R. drawable.right_ear);
rightEarInside = context.getDrawable(R. drawable.right_ear_inside);
leftEarInside = context.getDrawable(R. drawable.left_ear_inside);
faceSpot = context.getDrawable(R. drawable.face_spot);
cap = context.getDrawable(R. drawable.cap);
mouth = context.getDrawable(R. drawable.mouth);
foot4 = context.getDrawable(R. drawable.foot4);
foot3 = context.getDrawable(R. drawable.foot3);
foot1 = context.getDrawable(R. drawable.foot1);
foot2 = context.getDrawable(R. drawable.foot2);
leg2Shadow = context.getDrawable(R. drawable.leg2_shadow);
tailShadow = context.getDrawable(R. drawable.tail_shadow);
tailCap = context.getDrawable(R. drawable.tail_cap);
belly = context.getDrawable(R. drawable.belly);
back = context.getDrawable(R. drawable.back);
rightEye = context.getDrawable(R. drawable.right_eye);
leftEye = context.getDrawable(R. drawable.left_eye);
nose = context.getDrawable(R. drawable.nose);
collar = context.getDrawable(R. drawable.collar);
bowtie = context.getDrawable(R. drawable.bowtie);
} else {
// тут код для старих версій
}
drawingOrder = getDrawingOrder();
}


Так як вектор володіє чудовою можливістю змінювати заливку на льоту, то у випадковому порядку вибираємо кольори і генеруємо унікального кота. Головне — не переборщити. Не варто фарбувати одну лапу в чорний, а другу лапу в коричневий колір.

Якщо запускати програму в звичайному режимі, то колекціонування котиків розтягнеться на довгі години. Тому підміняємо код, який відповідає за інтервал, встановивши його в 1 секунду. Швидко заповнюємо екран.


Безперечно варто покопатися в коді додаток і вивчити інші методи. Наприклад, коли ви хочете поділитися спійманим котом у соціальних мережах, то генерується окреме зображення PNG розміром 512х512 хорошого дозволу на пристроях не нижче Android 6.0 Marshmallow. На старих пристроях зображення формується через інший метод, і картинки виходять змазаними.
Для порівняння перша картинка, яку я отримав на емуляторі Android 7.


А це картинка, отримана на пристрої Android 4.4.2


Тим, хто вивчає програмування під Android, знадобляться прийоми запуску служб з реєстрацією планувальника JobSheduler, створення діалогів, використання SharedPreferences.

На мій погляд, пасхалка вийшла гарна і підняла мені настрій.
Збирайте котиків!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.