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

среда, 6 декабря 2017 г.

Конвертируем PDF в картинку

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

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

четверг, 30 ноября 2017 г.

Создание кастомного пина на Google map

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

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

image

У нас тут и Джордж Клуни, и Роберт Де Ниро и Дональд Трамп, прям отличная пьянка!

четверг, 16 ноября 2017 г.

Добавляем индикатор в Toolbar и в TabLayout

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

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

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


Все сталкиваются рано или поздно с созданием локальной базы данных в своих приложениях. Часто, после нескольких часов гугления у нас остается список из кучи ORM которые могут нам помочь с разработкой БД. Я уже писал про самостоятельную разработку БД, еще очень давно, с того времени много чего поменялось, мой уровень знаний вырос, и я сейчас бы не советовал использовать тот способ, так как я писал уже про работу с БД с помощью Realm который разы удобней и проще чем написание и поддержка базы на стандартных методах и классах андроида. Тем более Room является библиотекой которую сам Google советует использовать как БД.

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


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

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

вторник, 14 ноября 2017 г.

Пишем код красиво с Rx Android


Давно хотел рассказать про RX но никак не выходило, то времени не хватало, то желания небыло, и так куча причин была… А тут выдалось свободное время, и желание тоже появилось, в общем как-то планеты сошлись все в одну линию и пришло осознание бытия, и что пора написать что-то новое. 

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

Попался мне проект один, который был написан на Rx, я как нубас впал в ступор и начал истерить что это вообще какая-то не понятная хрень и в растроенных чувствах начал разбираться в ней. В итоге понял что эта непонятная хрень довольно таки удобная хрень, дак еще и полезная, так как она обсорбирует в себя кучу ошибок, и разных плюшек типа работы в UI треде или объеденение нескольких списков в один после запроса. 

В этой статье я хочу рассказать про несколько вариантов использования Rx в проекте, в одном случае я приведу прям вот живой пример использования этой штуки, а в других случаях пройдусь объяснив как это можно реализовать у себя в проекте. Я лично использую Rx для спокойной и удобной работы в UI треде, как минимум не надо создавать там разные AsyncTask'и и писать кучу колбеков, достаточно написать один класс в котором будут нужные методы, а дальше просто вызывать этот класс в нужных классах, и получать нужные данные. 

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

Пример работы с Dagger 2 в связке с Retrofit



Написание кода меня очень увлекает и я люблю это, люблю писать всякие ништячки — программки, утилитки и т.д. Мне это доставляет удовольствие. Но иногда меня очень сильно бесит большое количество объявлений новых объектов типа Object object = new Object();где Object это какой-то класс объект в котором хранятся данные или еще что-то на подобии.

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

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

воскресенье, 20 августа 2017 г.

Пишем socket эхо сервер и клиент



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

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

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

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


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

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

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

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


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

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

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

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


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

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