Сообщество - Android Developers

Android Developers

90 постов 2 041 подписчик

Популярные теги в сообществе:

12

Material Design - Пора обновляться. Swipe 2 Refresh

Привет, человеки!


Видимо, в качестве извинения бомбануло увеличить количество постов по MD, или просто нечего делать холопу.


Сегодня разговариваем про Swipe to Refresh

Material Design - Пора обновляться. Swipe 2 Refresh Android, Программирование, Гифка, Длиннопост

Итак, Swipe to Refresh - модная фишка для многих смартфонов на всех операционных системах. Тянем экран вниз/вверх - контент обновляется. Удобно, прикольно, сопровождается клевой анимацией, которую мы будем повторять:

Material Design - Пора обновляться. Swipe 2 Refresh Android, Программирование, Гифка, Длиннопост

Долго кота за яйки тянуть не буду, программируем в том же Pikabu (может когда нибудь доведу до ума).


Создаем активность, где в дальнейшем планируется что то обновлять, пишем код в слое XML:


(не забудьте добавить для поддержки в Gradle)

compile 'com.android.support:support-v4:22.2.0'
Material Design - Пора обновляться. Swipe 2 Refresh Android, Программирование, Гифка, Длиннопост

Так как слой присутствует в компоненте поддержки, но его нет на панели инструментов в студии, вводить приходиться вручную

Material Design - Пора обновляться. Swipe 2 Refresh Android, Программирование, Гифка, Длиннопост

Обратите внимание, что наш слой является корневым, а внутри него уже пихается все остальное. Это есть условие для корректного скроллинга.


А теперь добавим немного кода:

Material Design - Пора обновляться. Swipe 2 Refresh Android, Программирование, Гифка, Длиннопост

Что происходит?


1 - Инициалзируем + находим слой по id

2 - Устанавливаем слушатель

3 - Задаем палитру цветов (каждый оборот кружочка - новый цвет)


Код слушателя:

Material Design - Пора обновляться. Swipe 2 Refresh Android, Программирование, Гифка, Длиннопост

Что происходит?


Один метод - onRefresh - указываем действие, что душе угодно.


Так как я использую это нововведение в мини браузере, то у меня этот метод обновит страницу согласно методу reload().

Кстати, цифра 3500 - это время в миллисекундах, которое колесико будет крутиться.


Смотрим что получилось на реальном устройстве:

Material Design - Пора обновляться. Swipe 2 Refresh Android, Программирование, Гифка, Длиннопост

Все шуршит, и обновляется.

Пост получился короткий, но всем по обычаю спасибо за интерес. В следующий раз поговорим о Drawable Selector. Его хочу описать потому, так как использую всвязи с изменением графики для первой простейшей игры.


Также напоминаю, что действует конкурс, по окончанию которого я бесплатно исполню желание людей, которым необходим сайт или приложение для вашего стартапа.


Всем бобра!

Показать полностью 7
28

Material Design - Пора обновляться. Coordinator + Material Search.

Привет, товарищи!


В сегодняшнем посте мы рассмотрим два вопроса по дизайну. Во первых, я покажу еще один пример по Coordinator, а также мы прокачаем строку поиска, в соответствии с гайдлайнами.


Полетели!

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

Для затравки покажу то, чего мы добьемся в конечном итоге:

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

Называется такое чудо flexible space. Общий принцип в в том, что по мере скроллинга пальцем изображение, загруженное в CollapsingToolbar'е, скрывается вместе с этой панелью.


Мы немного улучшим изображение, наложив на него фильтр. Таким образом оно будет иметь оттенок из нашей цветовой палитры.


Работать будем в приложении Pikabu Free, которое в скором времени получит индекс 2.3


Открываем студию, создаем активность, открываем слой xml:

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

Разметка в слое следующая (описываю только наш пример, мои кнопки и дополнительные виджеты туда не входят):


- CoordinatorLayout

-- AppBarLayout

--- CollapsingToolbarLayout

---- ImageView

----- Toolbar

( закрываем все слои в обратном порядке )

------ FloatingActionButton

Хотелось бы добавить, что к атрибуту ImageView мы добавляем параметр android:tint="#BB689F38", это наше будущее затемнение.


А у слоя CollapsingToolbarLayout параметр android:layout_height="300dp", это его общая ширина.

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

Теперь открываем класс активности, вставляем код. Ссылка на гитхаб будет в конце статьи, поэтому не списывайте =)

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

Проверяем. Откроем на реальном устройстве, предварительно загрузив изображение:

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

Отображается реальная ширина CollapsingToolbarLayout (300dp). Если будем скроллить, он спрячется вместе с FAB, и останется только Tollbar

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

Кроме самого фильтра прокачан и показ картинок. При каждом открытии программы рандомно загружается какая нибудь печенька, чтобы пикабунятам было не скучно.


Выглядит примерно так:

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

ШАГ 2 - ПОИСК


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


Пример такого поиска можно посмотреть в Google Chrome, при вводе адреса

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

Импортируем библиотеку в Gradle:

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

Вставляем в конце файла (XML) виджет поиска. Почему так? Так как поиск будет на весь экран, соответственно ему требуется match_parent на ширину и высоту, и он будет некорректно отображаться внутри других слоев

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

В коде нужно добавить три слушателя:


- setOnQueryTextListener (слушает нажатия на клавиатуру, и на кнопку подтверждения)

- setSearchViewListener (слушает состояния поиска - открыт / закрыт / неактивен)

- setOnItemClickListener (слушает нажатия на предыдущий поиск)

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

И вроде все. Компилируем все это дело, загружаем на устройство, проверяем:

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

Нажимаем на значок поиска. Он раскроется на весь экран с приятной анимацией:

Material Design - Пора обновляться. Coordinator + Material Search. Программирование, Программирование на Android, Гифка, Длиннопост

На сегодня все, спасибо за интерес.


https://github.com/Mauker1/MaterialSearchView - библиотека поиска на гитхабе

https://github.com/saulmm/CoordinatorExamples - библиотека примеров MD, которые я описываю


Также напоминаю, что действует конкурс, по окончанию которого я бесплатно исполню желание людей, которым необходим сайт или приложение для вашего стартапа.


Всем бобра!

Показать полностью 14
8

Пишем простейшую игру на Android (Часть 2)

Привет, пикабуняне!


Продолжаем наш рассказ о написании простейшей игры на платформе Android.


Сразу для лентяев - игра в стиле Викторина, много непонятных слов и букв, есть картинки.

Всю процедуру разбил на несколько подтем, то, что пройдено, отмечу ссылкой.


1 - Макет

2/3 - Функционал

4 - Графика (иконки)

5 - Графика (интерфейс)

6 - Работа над ошибками

7 - Тестирование

Пишем простейшую игру на Android (Часть 2) Программирование, Android, Длиннопост

В прошлый раз, когда мы собирали скелет, я совсем забыл о необходимости создать еще одну активность в карьере. Каждый этап прохождения будет фиксироваться, позволяя открывать более сложные вопросы.


Скриншот выше - новая активность, назвал ее одноименно: stage_1


Для начала мы установим для всего приложения полноэкранный режим. Во первых, у нас должно получиться что то наподобие игры, а большинство игр полноэкранные, и в них нет стандартных графических черт из ОС.


Это дело мы настраиваем в манифесте, предварительно создав новый стиль с параметром

<item name="android:windowFullscreen">true</item>

Пишем простейшую игру на Android (Часть 2) Программирование, Android, Длиннопост

Далее в первой категории вопросов (коих будет 20, для разминки), нужно написать много методов, которые отвечают за подсказки, отображение контента, и обновление кнопок, так как вопросы каждый раз разные, и необходимо проверять правильность ввода пользователем.


Я опишу наиболее важные процедуры на экране.

Пишем простейшую игру на Android (Часть 2) Программирование, Android, Длиннопост

На данном экране мы видим:


- TextView (Номер вопроса)

- ImageView (Изображение, которое я показываю через библиотеки Picasso + PolygonImageView, позволяющее выводить произвольные рамки и фигуры).

Искать в гитхабе по запросу PolygonImageView

- TextView (Текст вопроса)

- Button (Кнопка ответить. По ней будет выводиться диалог, в котором можно ввести ответ)

- Button (Кнопка для подскази. По нажатию забирает драгоценные фантики, и выводит подсказку)

- Button (Кнопка пропустить. Позволяет пропустить текущий вопрос, и перейти к следующему. Необходимо сделать количество пропусков ограниченным)

Пишем простейшую игру на Android (Часть 2) Программирование, Android, Длиннопост

Первым делом мы добавляем к стандартному коду из активности настройки sharedpreference, начальную позицию фантиков и вызываем метод quest_one. Он и загружает первый вопрос:

Пишем простейшую игру на Android (Часть 2) Программирование, Android, Длиннопост

В методе я добавил комментарии, так что не сложно разобраться. Картинка, которая взятая из гугла, в последующем будет сжата и загружена на хост/или в приложение, некоторые значения будут заталкиваться в strings (потому что так надо)

Пишем простейшую игру на Android (Часть 2) Программирование, Android, Длиннопост

Метод, отлавливающий нажатие на кнопку "Подсказать". Вначале, в методе идет проверка, сколько фантиков накоплено у юзера. Если фантиков не хватает, то подсказка показана не будет.


Если же фантиков достаточно, будет вызван alertdialog, в котором будет браться значение из string

Пишем простейшую игру на Android (Часть 2) Программирование, Android, Длиннопост

метод, отвечающий за проверку введенных данных. Вначале, мы получаем введенный текст, переводим его в формат string, и с помощью параметра equals сравниваем приведенное, значение, с тем что хранится у нас. Если будет введен правильны ответ, появиться маленькое окошко, с поздравлением:

Пишем простейшую игру на Android (Часть 2) Программирование, Android, Длиннопост

Я также не описал методы, которые позволяют сохранять количество фантиков при переходе, а также методы для начисления этих самых фантиков.


Выполняется там простейшая математическая операция на языке ява (+/-), и там показывать даже нечего.


В следующий раз мы будем дорабатывать кнопки (не работает кнопка пропустить), и сохранять вопрос, на котором остановился пользователь, если решит выйти (сейчас все сбрасывается в начало).


Также нам надо поработать над уведомлениями, если ответ пользователя был неправильный.


Друзья!


Желающие (и имеющие свободное время) художники могут присоединиться к созданию игрового интерфейса, так как игра будет полноэкранной, и многие элементы будут упразднены. За идею =)


Те личности, которые полезных навыков не имеют желают посодействовать в прототипировании, могут изъявить свои пожелания, что хотелось бы увидеть.


Например, угадывать не только изображения, но и слова из цитат, фраз, стихов и пр.



Также напоминаю, что действует конкурс, по окончанию которого я бесплатно исполню желание людей, которым необходим сайт или приложение для вашего стартапа.


Всем бобра!

Показать полностью 8
1

OneClick - Исполнение желаний

Привет, пиплы!


Прошу простить моих подписчиков слишком долгим отсутствием, я немного был в отпуске, и чтобы не просиживать дни напролет в гостинице, оставил ноутбук дома.


Закончив принимать солнечные ванны, я обнаружил, что во время моего отсутствия многое изменилось.

Например, в мобильной версии пикабу теперь можно публиковать посты, бандеролька безнаказанно унижает все, что плохо лежит, а вонючки крутят хоровод вокруг всего происходящего.


Я решил тоже кое что изменить, и полностью обновил сайт, который рассказывает о моем скромном занятии. Теперь он стал проще, быстрее загружается, и в случае чего, со мной легче связаться.


Если интересно, могу запилить краткий курс по созданию landing page, или одностраничников.

OneClick - Исполнение желаний Android, Программирование, Длиннопост

Вдобавок, на данный момент у меня появилось немного свободного времени, и я хотел бы предложить помощь всем желающим в программировании / создании сайтов / мобильных приложений.


От вас:


У вас есть стартап, о котором вы хотите заявить в интернете, или вы планируете создать мега крутой магазин, или мобильное приложение, или что то такое, о чем давно думаете, но никак не решаетесь.


Причин, почему так сложилось, может быть масса, некоторые из них:


а) - не умею программировать

б) - заказать сайт дорого / не у кого

в) - нет времени

г) - не умею обслуживать


От меня:


Я сделаю всю работу бесплатно, вам потребуется только создать ТЗ (техническое задание).


Есть некоторые условия:


- Возьму только 4 самые интересные работы, на каждую по месяцу до конца года (начиная с сентября). Если потребуется, запилю голосовалку.

- Не беру работы, которые нарушают закон в РФ, или являются неприемлемыми (XXX, например).

- Нужно рассказать, зачем вам нужен сайт или программа. Это важно, так как хотелось бы сделать для тех, кому действительно необходимо, а не для халявщиков.


Для этого заполняете форму на сайте. Дополнительно, мне нужен от вас ВК id, чтобы держать с вами связь.


По поводу уроков по MD - начиная с 4-5 числа, полноценно сяду обновлять приложения и попутно публиковать, работы накопилось много.


Пост создан с целью сделать мир чуточку лучше.

Если школота часть пользователей со мной не согласна, комменты для минусов внутри.


Всем хорошей пятницы!)

Показать полностью 1
5

Material Design - пора обновляться. Coordinator, дубль два.

Привет, человеки!


Наступили долгожданные выходные, на улице щебечут птички (собачки\котятки), а мы усаживаемся за компьютер, и продолжаем кодить.


В прошлый раз мы с помощью говна и палок силы интеллекта интегрировали предиктивный поиск в приложении, на основе имеющихся у нас данных. Сегодня мы поговорим о библиотеке Picasso, о том, как она может пригодиться в обновлении интерфейса. Также я обновлю данные по компоненту Coordinator.

Material Design - пора обновляться. Coordinator, дубль два. Android, Программирование, Гифка, Длиннопост

Для затравки - пример того, чего мы добьемся с вами в этот раз:

Material Design - пора обновляться. Coordinator, дубль два. Android, Программирование, Гифка, Длиннопост

Перед нами - элемент Coordinator. Я уже рассказывал о нем до появления сообществ, поэтому дублировать информацию, и засорять пост не буду. При желании, загляните в мой профиль.


Программировать мы будем на примере приложения Pikabu для Android - мое первое творение, выложенное на всеобщее обозрение на этом портале.


Первым делом открываем студию, создаем любую активность. Код, который она в себе содержит, нам не пригодиться, поэтому разницы нет.

Material Design - пора обновляться. Coordinator, дубль два. Android, Программирование, Гифка, Длиннопост

Пример, который я описываю, имеет собственные исходники на гитхабе, и представляет собой ознакомительный код с презентации Google I/O. На его основе вы можете повторить мои шаги.


https://github.com/saulmm/CoordinatorExamples


Итак, после создания активности, нам нужно рассмотреть, что нам необходимо координировать. На гифке присутствует ImageView + CircleImageView, TabLayout + текстовые поля + Toolbar. Дохрена. Вот как это выглядит в файле разметки:


- CoordinatorLayout

-- AppBarLayout

--- CollapsingToolbarLayout

---- ImageView

-----CircleImageView (отдельная библиотека)

------Toolbar

-------LinearLayout

--------TextView

-------/LinearLayout (закрыли)

---------TabLayout

/закрываем все остальное


Файл разметки получился довольно толстый. И если представить, что все эти элементы из коробки взаимодействуют друг с другом, ужасаешься еще больше.


Как выглядит это на практике, в эмуляторе (я заранее подготовил простую круглую картинку в формате png):

Material Design - пора обновляться. Coordinator, дубль два. Android, Программирование, Гифка, Длиннопост

Верхняя часть экрана(до иконки) у нас не занята - туда мы затолкаем изображение, которое будем грузить из сети при помощи Picasso. Это отдельная (и довольно популярная) библиотека, которая пользуется невероятным спросом среди разработчиков.


Несмотря на ее довольно простое использование, обладает она огромным функционалом. Кроме того, что она может загрузить изображение, она может его уменьшить, трансформировать, или изменить размер.


Загружаем картинку:

Material Design - пора обновляться. Coordinator, дубль два. Android, Программирование, Гифка, Длиннопост

Вот и все. Три строчки кода (не считая объявления imageview), и изображение будет загружено при посещении активности, а при повторном запуске оно подгрузится из кеша.


Теперь разбираемся с табами. В примере с гитхаба показан какой то непонятный пример, с ненужными (для меня) классами, поэтому я сделал все по своему.


Нам необходимо создать два класса, для каждой из вкладок. Я не напрягал мозг, и назвал их Tаb1 и Tab2. Профит.

Material Design - пора обновляться. Coordinator, дубль два. Android, Программирование, Гифка, Длиннопост

В коде ничего сверхъестественного нет, объявили класс, и назначили слой для него. Аналогично поступаем со второй вкладкой, только меняем названия.


Далее, нам в коде главной активности потребуется ViewPager и встроенный класс ViewPagerAdapter, которые обеспечат работу с вкладками.

Material Design - пора обновляться. Coordinator, дубль два. Android, Программирование, Гифка, Длиннопост

Запускаем на устройстве, проверяем, что все загружается (во фрагмент с любовью были добавлены кнопки, которые я позже заставлю тыкаться):

Material Design - пора обновляться. Coordinator, дубль два. Android, Программирование, Гифка, Длиннопост

Все шуршит, и скроллится вправо\влево.


P.S. на старых версиях Android (до API 21) нет понятия android:elevation, поэтому круглая картинка будет обрезаться пополам. Чтобы этого косяка избежать, я просто убрал ее для старых версий:

Material Design - пора обновляться. Coordinator, дубль два. Android, Программирование, Гифка, Длиннопост

Вот и все на сегодня. Обновление приложения будет в близжайшие дни, как только я закончу все проверять.


Спасибо, что дочитали до конца! В следующий раз мы поговорим о горизонтальной ориентации для планшетов, и я покажу еще один крутой пример по Coordinator.


P.S. мои дорогие подписчики! Если я начал выкладывать котиков, значит школота интеллигенция портала жестом однокнопочного рукоблуда руки поставила минусы, и я восполняю баланс в мире =)

Показать полностью 9
5

Material Design - пора обновляться (Часть 6)

Привет, земляне!


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


В прошлый раз мы вели разговор про обновленный компонент Tabs (Вкладки). Сегодня, как и обещал, я расскажу про умный поиск в приложении, по вводу первых символов. В качестве примера, буду использовать собственное приложение для просмотра сериалов. Полетели!

Material Design - пора обновляться (Часть 6) Android, Программирование, Гифка, Длиннопост

Для затравки, я покажу пример того, что будет достигнуто в этом посте:

Material Design - пора обновляться (Часть 6) Android, Программирование, Гифка, Длиннопост

Итак, перед вами - предиктивный поиск элементов, среди массива списка(ов). Проще говоря, система определяет наиболее подходящий вариант из поискового запроса, которые мы ей указываем.


Что это дает? Ускоренный поиск повышает юзабилити в приложении, решает возможности встроенных библиотек, которые теперь нет нужды использовать, плюс это все завернуто в строке Toolbar, и классно выглядит. Пример на обновленном устройстве выглядит так:

Material Design - пора обновляться (Часть 6) Android, Программирование, Гифка, Длиннопост

Как можно узреть, нам дается список из сериалов, и по вводу первых символов нам предлагается наиболее подходящий результат. Если ввести слово, которое отсутствует среди массива, мы ничего не увидим, так как я не знаю сериала гладиолус. И приложение тоже.


Давайте залезем в студию, и посмотрим, как это делается. Создаем Basic Activity

Material Design - пора обновляться (Часть 6) Android, Программирование, Гифка, Длиннопост

После того, как мы создали активность, нам необходимо реализовать список. Для этого мы объявляем компонент ListView, указываем его местонахождение в слое, и присваиваем значения для элементов.


DANGER! Не повторяйте описанный мной способ реализации строк в коде - это неправильно, используйте файл strings. Сейчас, обновляя приложения для стран, кроме России, я лью слезы, и все переделываю.

Material Design - пора обновляться (Часть 6) Android, Программирование, Гифка, Длиннопост

После того, как мы отобразили список в нашей активности, мы реализуем кнопку в Toolbar - именно нажатие по ней вызывает необходимый код для поиска.

Material Design - пора обновляться (Часть 6) Android, Программирование, Гифка, Длиннопост

Описывать тут практически нечего, мы объявляем компонент searchManager, который в свою очередь возвращает значение в методе onQueryTextChange(String s).


То есть, если в добавок к этому коду, добавить Toast, то при каждом вводе нового символа мы будем видеть всплывающую подсказку. Или что то другое, если у вас появиться необходимость проапгрейдить этот метод.


Осталось разобраться, как мы реагируем на клик из списка, который мы заполнили. Вначале, объявим адаптер, и назначим слушатель:

Material Design - пора обновляться (Часть 6) Android, Программирование, Гифка, Длиннопост

Опять таки, я не рекомендую использовать именно такой код, так как он сильно нагружает ЦП (центральный процессор) на вашем маленьком смартфоне. Почему?


Представим, что в списке 20 элементов. Такая функция, как сравнение текста


if (((TextView) view).getText() == "Сверхъестественное")


заставляет перебрать все значения их этого списка. В нашем случае, это не страшно, ну а если элементов штук 500? Приложение просто отвалится на старых девайсах, а на современных затупит. Я предлагаю (и именно так сейчас переделываю) использовать фиксированные значения для списка.


if (position == 4) {


В таком случае ничего не потеряется.


Друзья! Спасибо за то, что дочитали до конца. В связи с обновлением на Pikabu, было создано сообщество Android Developers, куда я предлагаю вступить заинтересованным личностям. Все посты теперь будут публиковаться там.


Также, я совсем забыл упомянуть о ништяках для людей, которые помогали мне в этом посте. Я про вас не забыл! На вашу почту скоро упадет обновленное приложение, и личная благодарность за то, что откликнулись на мой месадж.


В следующий раз пост будет красочнее, так как мы поговорим о библиотеке для загрузки/отображения изображений.


P.S. мои дорогие подписчики! Если я начал выкладывать котиков, значит школота интеллигенция портала жестом однокнопочного рукоблуда руки поставила минусы, и я восполняю баланс в мире =)

Показать полностью 7
Отличная работа, все прочитано!