Поиск по этому блогу

вторник, 15 августа 2017 г.

Пример написания большой пульсирующей кнопки

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


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

вторник, 8 августа 2017 г.

Пагинация для локального ArrayList

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


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

понедельник, 31 июля 2017 г.

Закрытии активити свайпом в право как в Telegram

Многие пользователи телеграма я думаю задумывались как же они сделали эту удобную фичу с сдвигиванием экрана вправо для закрытия текущей активити? Я думаю все, ибо это очень удобно, ну прям вообще супер удобно, почему это не ввели в android'e как и в iOS по дефолту я не понимаю, ведь эта фича по сути не так и сложная в реализации и она очень интуитивна и проста в использовании, не надо тянутся каждый раз к кнопке назад в левом верхнем углу, и не надо тянуться к кнопкам в низу экрана, просто смахиваешь в право.


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

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

воскресенье, 23 июля 2017 г.

Создание горизонтальной пошаговой вьюхи со списком относящимся к шагам

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

 

вторник, 11 июля 2017 г.

Read more кнопка в TextView

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

 

понедельник, 10 июля 2017 г.

Кастомный календарь для назначения и выполнения целей

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

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

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

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

 

четверг, 15 июня 2017 г.

Пример записи аудио с паузой и востановлением записи

Это будет не большая заметка о том как лучше записывать аудио. Я для себя недавно открыл библиотеку PauseResumeAudioRecorder, оч крутая библиотека, позволяет выполнять все нужные функции для записи аудио, есть и запись, и пауза, и резум и стоп, чего собственно нет в стандартном AudioRecord'ере. Я на основе этой либы создал свою, немного подредактировал код под свои нужды, вывел амплитуду громкости и еще пару фич. Очень удобная библиотека в общем, можно ее кастомизировать под себя.

Разработка базы данных с помощью Realm


Иногда приходится создавать небольшие базы данных для хранения мелких данных, иногда большие для хранения кеша всего приложения, я лично для такого использую библиотеку Realm. Это очень удобная ORM которая позволяет в пару строк кода создать таблицу и записать туда данные. Это все очень красиво и удобно реализованно в библиотеке которую мы можем подключить через gradle.

вторник, 6 июня 2017 г.

Создаем бесконечный список с помощью RecyclerView

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


В общем начнем с того я писал про работу с ретрофит вот тут. В этой статье я буду использовать его так же для работы с API. API же я буду использовать от github как вы уже наверно заметили со скриншота и будем мы искать репозитории. Вообще приложение для примера будет очень простое, думаю для человека который раньше уже работал с RecyclerView, Callback'ами и Retrofit все окажется очень даже просто. Ну в общем начнем педалить.

понедельник, 29 мая 2017 г.

Создаем циферблат для Android Wear

Купил я значит себе часы на android wear, и думал что они будут полезные мне. На деле совершенно безсмысленная хрень, на деле — фитнес трекер с функцией приема звонков и уведомлений. На них конечно можно еще играть в игры которые адаптированы под маленький экранчик, но это выглядит дико, когда в метро или на улице идет дядька и втыкает в часы на руке. Дико в общем.

Посмотрев на экраны часов которые предоставленны в google play, я подумал что лучше я буду использовать стандартные циферблаты которые предустановленны в часах. Но потом меня осенило, я же типа программист, я могу сам запедалить себе циферблат который мне будет подходить, ну и в общем я решил попробовать и сделать себе какую-то красоту на часы. Так как у меня вкуса нет вообще, и дизайнер из меня никакой экран я сделал очень простой, ну и тут я вам покажу основные функции. У нас часы будут уметь показывать время, дату и уровень батареи.


Рисовать мы будем с помощью canvas'a, в CanvasWatchFaceService. Для этого вам нужно создать проект специальный для часов. Вам создастся проект в котором у вас будет пример с аналоговыми часами. Стираем все по самое
public class WatchFaceService extends CanvasWatchFaceService { }
Теперь у нас есть пустой класс, мы разобьем логику часов на две части, в первой у нас будет вся логика относящаяся к работе часов в фоне, и во второй у нас будет вся отрисовка с помощью canvas'a на экране. Так и понятней и логичней как по мне.

суббота, 27 мая 2017 г.

Создаем настраевываемый PieChartView с помощью Canvas

Как-то довелось мне писать приложение в котором нужно было уметь настраивать круговую диаграмму под свои нужды. Ну в общем я взялся, и начал реализовывать думая что я суперкрутой девелопер, но я не знал как я ошибаюсь. В общем делаю я это все и понимаю что или я это все реализую криво но оно будет работать так как надо, или я это реализую красиво но оно будет работать криво, выбрал я второй вариант, и я пожалел про это… Потому что оно хоть и работает как надо, но все равно криво, а реализация хоть и казалась мне красивой, но спустя несколько лет после этого посмотрев на код я понял что дело дрянь, и даже после рефакторинга все равно красиво не стало, осталось все так же куча непонятных цифр которые мы вычитаем или прибавляем к нашим позициям элементов. Так что если у кого то будут какие-то идеи - то я буду только рад их услышать :) 

Я не претендую на нобелевскую премию этим кодом, так что не осуждайте меня :)

четверг, 25 мая 2017 г.

Работа с Retrofit


image
Сталкиваясь с разными проектами я заметил, что большинство до сих пор используют разные библиотеки, которые реализуют запросы внутри UI или вообще через AsyncTask. Это как по мне глупо, так как для реализации API в приложении есть такая чудесная библиотека, как Retrofit 2.

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

Приведу описание библиотеки из вики:
Retrofit является REST-клиентов для безопасной работы в Android и Java. Библиотекой удобно пользоваться для запроса к различным веб-сервисам с командами GET, POST, PUT, DELETE. Может работать в асинхронном режиме, что избавляет от лишнего кода.

среда, 24 мая 2017 г.

Создаем CustomView из LinearLayout

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

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