- PVSM.RU - https://www.pvsm.ru -
Я думаю многие знают, что такое хакатон [1], более того о глобальном GTUG хакатоне (18-19 февраля) в Москве [2], Питере [3] и Киеве [4] уже писали на хабре. Я хочу рассказать о своем участии в омском android хакатоне и о том, что из этого вышло.
Фотографии, рассказ и ссылка на готовое приложение в маркете под катом.
Когда я узнала, что мой коллега Алексей Коровянский организовывает android хакатон, я сразу же захотела участвовать. Даже несмотря на то, что работаю ios-разработчиком и ничего про android тогда еще не знала. Позвала своего брата kmmbvnr [5]. И мы стали думать над идеей… Вариантов была масса — от приложения с расходами до чата для поклонников формулы 1. Все идеи казались сырыми и сложными для людей без опыта android разработки. Хотелось что-то простое и классное. Ответ мы нашли рядом. Моя племянница (3 года) обожает игру на ipod-e, в которой можно составлять животных, меняя им головы, туловища и ноги. И всегда спрашивает родителей, кто получился в итоге. Так мы пришли к “Путанице”. Главной фичей решили сделать озвучку (чтобы племянница лишний раз не отвлекала папу). Подумали, что под андройд это сделать несложно даже новичку и, догорившись с дизайнером, стали ждать сам хакатон.
Хакатон в Омске собрал более 15 команд с самыми разными идеями проектов — например, гео помощник, который посылает тебе напоминания в зависимости от твоего местоположения, или игра с дополненой реальностью и даже приложение учета расходов ;)
Все идеи были классные, всем очень хотелось скорее взяться за дело!
Для начала нам надо было сделать бесконечный скроллер с разными картинками — все из чего игра и состоит :)
Для этого использовали ViewPager. Немного колдовства и к обеду мы заставили его быть бесконечным — в FragmentPagerAdapter первым элементом массива делаем последнюю картинку, а последним — первую. И в OnPageChangeListener-е просто перескакиваем на начало или конец, смотря до чего доскроллили.
public void onPageScrollStateChanged(int state) {
int itemCount = mPagerAdapter.getCount();
if (state == ViewPager.SCROLL_STATE_IDLE) {
int currentItem = mViewPager.getCurrentItem();
if(currentItem == 0) {
mViewPager.setCurrentItem(itemCount-2, false);
}
else if(currentItem == itemCount-1) {
mViewPager.setCurrentItem(1, false);
}
}
}
Потом разобрались как в layout правильно скейлить картинки, оказалось даже проще, чем думали — поставили layout_weight.
<android.support.v4.view.ViewPager
android:id="@+id/top_pager"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1.65"
/>
<android.support.v4.view.ViewPager
android:id="@+id/middle_pager"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
/>
<android.support.v4.view.ViewPager
android:id="@+id/bottom_pager"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="0.88"
/>
Вот в общем-то и все приложение — когда у нас все это наконец-то получилось, мы были очень рады!
К концу первого дня мы добавили трех животных, нарисованных нашим дизайнером и научили наше приложение мяукать, а точнее мы научились проигрывать звуки на android-e.
К слову сказать, организаторы постарались — был и обед и развлекательная программа (играли в игру “Завалинка [6]”).
Второй день начался активно — все с энтузиазмом продолжили кодить.
Просто менять картинки и слушать название — это для подрастающего ребенка скучно. Решили, что нужно внести какой-то challenge. Придумали уровень — собери животного на время. При этом время уменьшается, а сложность увеличивается (от кота до гусе-дельфино-пчелы).
В темпе хакатона мы справились быстро (но код с таймером мы никому не будем показывать. Никому и никогда — run в run-e это слишком).
Оставалось самое сложное — озвучка. Записали голос kmmvbnr, убрали шумы, разрезали, добавили в приложение. В итоге получилось 2 варианты игры — меняешь голову, туловище или ноги животному и слушаешь название (например кото-гусе-лошадь или дельфино-пчела) или наоборот, слушаешь задание (а как выглядит кот?) и собираешь кота.
Для самых маленьких добавили: картинки меняются, если потрясти девайс. Кстати, shake detection в iOS [7] заметно легче, чем в android [8].
Ну и эксперты [9] тоже не сидели без дела и за время хакатона написали игру — нужно было очистить экран на скорость. Победители получили призы.
Хоть наша озвучка и получилась кустарной, но для первого демофеста выглядело действительно впечатляюще. По крайней мере зрителям понравилось.
Наше приложение понравилось не только другим участникам, но и экспертам — наша игра заняла первое место!
Узнать android, написать приложение и все за 2 дня возможно только на хакатоне. Хакатон в Омске удался на 100%!
Все фотографии с хакатона [10] и отзывы участников [11].
Хоть наше приложение и выглядело законченым, оставалось еще много чего доделывать. При тестировании на смартфонах выяснилось, что памяти не хватает, пришлось ужимать картинки для разных экранов. Долго боролись с проблемой, чтобы на разных девайсах все выглядело красиво (ресурсы заметно разрослись: от одной папки drawable до семи). Поменяли озвучку, добавили картинок. Наконец 29 февраля решили, что русская версия готова и выложили в маркет.
Вот, что вышло в итоге
Путаница в маркете [12]
В ближайших планах добавить английскую озвучку и сделать ios приложение (которое уже почти готово, проходит бета-тестирование племянницей).
И, естественно, выступить на финальном демофесте 18го марта и побороться за главный приз :)
Автор: vitaa
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/3349
Ссылки в тексте:
[1] хакатон: http://www.google.com/url?q=http%3A%2F%2Fomskgtug.blogspot.com%2F2012%2F01%2Fandroid-18-19.html
[2] Москве: http://www.google.com/url?q=http%3A%2F%2Fhabrahabr.ru%2Fblogs%2Fi_am_advertising%2F138190%2F&sa=D&sntz=1&usg=AFQjCNGl0Jr9OyojmLCHa3hxFmel0HXqQg
[3] Питере: http://habrahabr.ru/blogs/i_am_advertising/138200/
[4] Киеве: http://www.google.com/url?q=http%3A%2F%2Fhabrahabr.ru%2Fblogs%2Fandroid%2F138474%2F&sa=D&sntz=1&usg=AFQjCNF0Dy91fTRdUocEb8oKbi23KM0TXg
[5] kmmbvnr: http://habrahabr.ru/users/kmmbvnr/
[6] Завалинка: http://www.google.com/url?q=http%3A%2F%2Fru.wikipedia.org%2Fwiki%2F%25D0%2597%25D0%25B0%25D0%25B2%25D0%25B0%25D0%25BB%25D0%25B8%25D0%25BD%25D0%25BA%25D0%25B0_%2528%25D0%25B8%25D0%25B3%25D1%2580%25D0%25B0%2529&sa=D&sntz=1&usg=AFQjCNE8PXl0s_ryxLl3rpmI9buTOFTXIQ
[7] iOS: https://developer.apple.com/library/ios/#DOCUMENTATION/EventHandling/Conceptual/EventHandlingiPhoneOS/MotionEvents/MotionEvents.html
[8] android: http://stackoverflow.com/questions/2317428/android-i-want-to-shake-it
[9] эксперты: http://www.google.com/url?q=http%3A%2F%2Fomskgtug.blogspot.com%2F2012%2F02%2Fblog-post.html
[10] Все фотографии с хакатона: https://plus.google.com/u/0/?tab=wX#photos/102520175692033125056/albums/posts
[11] отзывы участников: http://omskgtug.blogspot.com/2012/03/blog-post.html
[12] Путаница в маркете: https://play.google.com/store/apps/details?id=cc.wthr.mixup
Нажмите здесь для печати.