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

вторник, 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

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

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

вторник, 8 декабря 2015 г.

Show / Hide FAB Button

Сегодня встретился с такой интересной штукой как FAB Button. Раньше как то пользовался только кастомной кнопкой из разных репозиториев, а тут как то получилось что проект создался сразу с ней, и я столкнулся с проблемой показа ее во время скролла, когда скролили в низ кнопка то появлялась то исчезала, когда возвращались на верх она вообще не появлялась, в общем куча проблем, заказчик истерит «как это так», все истерят, в общем всеобщий апокалипсис. По этому мне пришлось написать кастомный листвью для этого. Решение нашел на хабре, по этому кому надо тот найдет, эту статью, переношу решение сюда для удобства.

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