Telegram Web
Реализация плавной анимации

Неоптимизированные анимации вызывают лаги, повышают энергопотребление и портят UX. Разберем как делать их плавными на Android и iOS.

📱Основные принципы

60 FPS или выше - целевой показатель плавности
Избегайте перерисовки - анимируйте только нужные свойства
Используйте аппаратное ускорение

🛠️ Инструменты и подходы

Для Android:

// Используйте Property Animation
ViewPropertyAnimator
.animate(view)
.translationX(100f)
.setDuration(300)
.setInterpolator(AccelerateDecelerateInterpolator())
.start()


Для iOS (Swift):

UIView.animate(withDuration: 0.3, 
delay: 0,
options: [.curveEaseInOut],
animations: {
view.frame.origin.x += 100
})



🚫 Частые ошибки

Анимация размеров (width/height) - вызывает перерасчет layout
Слишком сложные кривые Безье - нагрузка на CPU
Множество одновременных анимаций - конкуренция за ресурсы

💡 Оптимизационные советы

Используйте transform вместо изменения размеров: только нужные свойства
Используйте аппаратное
Для сложных анимаций используйте Lottie:
implementation 'com.airbnb.android:lottie:6.1.0'

Тестируйте производительность в режиме разработчика:

🔵 Android: "Profile GPU Rendering"
🔵 iOS: Core Animation Instrument

📊 Когда анимация действительно нужна?

— Переходы между экранами
— Визуальная обратная связь
— Акцентирование важных элементов

Какие советы вы дадите? Делитесь в комментариях 💬

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
5🥱2😁1
📉 Текст вдоль траектории

В статье автор научит рисовать текст по траектории (path) внутри холста Compose.

Это можно использовать для создания причудливой графики или анимации строки текста.

👉 Читать статью

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👏53🔥1
🚀 adb shell input – управление устройством через терминал

Хотите автоматизировать тесты или быстро проверить работу приложения без ручного ввода? С помощью adb shell input вы можете:

Имитировать нажатия (тапы, свайпы)
Вводить текст без клавиатуры
Отправлять системные события (кнопки Home, Back, Power)

Примеры команд:

# Тап по координатам (X Y)
adb shell input tap 500 1200

# Свайп (X1 Y1 X2 Y2 длительность)
adb shell input swipe 300 1600 300 400 500

# Ввод текста
adb shell input text "Hello_World!"

# Нажатие кнопки (KEYCODE_HOME)
adb shell input keyevent 3


Где пригодится:

1. Автотесты – создание сценариев для UI-тестирования
2. Демонстрации – запись повторяемых действий
3. Отладка – проверка обработки сложных жестов

Полезные KEYCODE:

3 – Home  
4 – Back
24 – Volume Up
66 – Enter
82 – Menu


Pro-совет:

Используйте adb shell getevent -l для определения точных координат элементов на экране.

Как вы используете эту команду? Делитесь кейсами 💬

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👾41🥱1
🔥 Последняя неделя перед стартом курса по AI-агентам

Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место

На курсе:
разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах

📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями

И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»

👉 Курс здесь
✏️ Чек-лист: полный аудит приложения

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

✔️ Базовые проверки

Поддержка последних версий ОС (Android 14/iOS 17+)
Адаптация под разные разрешения экранов
Корректная работа жестов (особенно на iOS)
Проверка на утечки памяти

✔️ Производительность

Время холодного старта < 1.5 сек
Потребление ОЗУ в пределах нормы
Нет лагов при скроллинге
Оптимизирован размер APK/IPA

✔️ Безопасность

Все API-запросы через HTTPS
Критические данные в Keychain/Keystore
Нет хардкодных паролей/токенов
Проверка на root/jailbreak

✔️ Локализация

Нет "вылезаний" текста за контейнеры
Поддержка RTL-языков
Корректные форматы дат/валют
Проверка всех языков в интерфейсе

Какие важные пункты мы забыли? Пишите в комментариях 💬

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
5
🎮 Работа с формами во Flutter

Формы являются фундаментальным элементом любого современного приложения.

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

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

👉 Читать статью

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1🥱1
😺 Подкасты и видео о мобильной разработке

Собрали лучшее о мобильной разработке. Включаем и смотрим по пути на работу.

🔘 Эти фичи Kotlin меняют правила игры

🔘 Что не так с Android разработкой?

🔘 Кроссплатформа, умный склад и DnD: кодим, автоматизируем, побеждаем

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👾 Kotlin Flow

Лето — лучшее время для сплава. Поэтому, если вы пока не в отпуске, давайте устроим короткий сплав по асинхронным потокам данных.

Kotlin Flow — это API для работы с асинхронными потоками данных, построенное поверх корутин.

👉 Читать статью

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🔥 Сегодня стартует курс по AI-агентам!

Онбординг уже сегодня, но ещё можно вписаться — ПОСЛЕДНИЙ ШАНС это сделать.

Мы больше года собирали мультиагентные системы: экспериментировали, переделывали и в итоге — оформили всё в 5 плотных вебинаров.

😤 «А можно ли вообще научиться чему-то за 5 вебинаров?!»

Если вы хотите просто послушать — нет
Если хотите разбираться и делать — да

➡️ На курсе:
— мы не читаем слайдики, а работаем в коде в реальном времени
— можно задавать вопросы прямо на вебинаре
— после каждого вебинара есть домашка и поддержка в чате

И главное — вы получаете системное понимание, а не набор хаотичных туториалов.

️Если вы думаете, что успеете потом — не успеете.
Старт сегодня:
— а те, кто вписался сейчас, будут вас опережатьв проектах, на грейде и в зарплате

Знакомьтесь, эксперт нашего курса:
Никита Зелинский — Chief Data Scientist МТС, Head of ML Platforms, руководитель центра компетенций по Data Science.

Стартуем сегодня — забронируй свое место
Текстовые редакторы vs IDE

Выбор между IDE и текстовым редактором - один из важных вопросов, на который должен ответить каждый разработчик.

IDE, как правило, включает в себя инструменты отладки, системы контроля версий и инструменты управления проектами, установленные в единой среде, помимо инструментов редактирования текста.

В то время как текстовый редактор сравнительно меньше по размеру и имеет специальные инструменты только для текста.

Что же лучше для программирования: текстовый редактор или IDE? Голосуйте и пишите своё мнение в комментариях 💬

❤️ 
— текстовый редактор
👍 
IDE

🐸 Библиотека мобильного разработчика 

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍214😁2
📲 Топ вакансий для мобильных разработчиков за неделю

iOS Developer — от 200 000 до 350 000 ₽, удалёнка

Junior Android Developer — удалёнка

Android-разработчик — от 200 000 ₽, удалёнка

IOS разработчик (Middle) — удалёнка

Android Developer (Middle+/Senior, Kotlin Multiplatform) — до 350 000 ₽, удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Mobile jobs

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
📌 Кратко про анонимные классы и объекты, object и companion object

Анонимный класс
— это класс, которые явно не объявлен с помощью class, наследуется от заданного класса или реализует заданный интерфейс.

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

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

val obj = object : SuperClassOrInterface() {
// implementation here
}


Объекты анонимных классов полезны для одноразового использования.

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

• можно задавать свойства, функции, блоки инициализации;

• можно наследоваться от других классов и реализовывать интерфейсы;

нельзя создавать конструкторы (как основные, так и вторичные).

Ключевое слово object позволяет одновременно объявить класс и создать его экземпляр (т.е. объект). При этом применять его можно по-разному:

object Name — это объявление объекта(оbject declaration), реализация паттерна Singleton;

companion object — это объект-компаньон внутри класса (также Singleton);

object — это объект-выражение (анонимный объект/object expression), не Singleton.

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1🌚1
🖥 2D-скролл во Flutter

Да кто такой этот ваш 2D-скролл? Зачем он нужен, если не делать аналог excel? На самом деле, двумерный скролл нужен в огромном количестве сценариев использования мобильных приложений.

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

Подробно разберёт, как сделать собственную производительную реализацию 2D-скролла, и оценит влияние на производительность на примере видеоредактора Yappy — приложения вертикальных видео.

👉 Читать статью

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
4
🔌 Реализация оффлайн-режима

Пользователи часто остаются без интернета, но хотят продолжать работать с приложением. Разберём, как грамотно реализовать оффлайн-режим.

⚙️ Техники реализации

1. Локальное кэширование данных

Android (Room):

@Entity  
data class CachedData(@PrimaryKey val id: String, val content: String)

@Dao
interface CacheDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(data: CachedData)
}


iOS (Core Data):

let context = persistentContainer.viewContext  
let entity = NSEntityDescription.insertNewObject(forEntityName: "CachedData", into: context)
entity.setValue(content, forKey: "content")
try? context.save()


2. Очередь запросов

Сохраняйте действия пользователя при отсутствии сети:

class OfflineQueue {  
private val queue = ConcurrentLinkedQueue<() -> Unit>()

fun addToQueue(action: () -> Unit) {
queue.add(action)
}

fun processQueue() {
while (queue.isNotEmpty()) {
queue.poll()?.invoke()
}
}
}


3. Умная синхронизация

Используйте WorkManager (Android) или Background Tasks (iOS) для фоновой синхронизации.

🚫 Чего избегать

1. Хранения конфиденциальных данных без шифрования
2. Бесконечного накопления несинхронизированных данных
3. Игнорирования конфликтов данных при синхронизации

💡 Продвинутые техники

1. Дельта-синхронизация – передавайте только изменения
2. Конфликт-менеджмент – стратегии разрешения противоречий
3. Прогрессивная загрузка – сначала кэш, потом обновления

Как вы реализуете оффлайн-режим? Делитесь решениями в комментариях 💬

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
6
🔌 Реализация оффлайн-режима

Пользователи часто остаются без интернета, но хотят продолжать работать с приложением. Разберём, как грамотно реализовать оффлайн-режим.

⚙️ Техники реализации

1. Локальное кэширование данных

Android (Room):

@Entity  
data class CachedData(@PrimaryKey val id: String, val content: String)

@Dao
interface CacheDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(data: CachedData)
}


iOS (Core Data):

let context = persistentContainer.viewContext  
let entity = NSEntityDescription.insertNewObject(forEntityName: "CachedData", into: context)
entity.setValue(content, forKey: "content")
try? context.save()


2. Очередь запросов

Сохраняйте действия пользователя при отсутствии сети:

class OfflineQueue {  
private val queue = ConcurrentLinkedQueue<() -> Unit>()

fun addToQueue(action: () -> Unit) {
queue.add(action)
}

fun processQueue() {
while (queue.isNotEmpty()) {
queue.poll()?.invoke()
}
}
}


3. Умная синхронизация

Используйте WorkManager (Android) или Background Tasks (iOS) для фоновой синхронизации.

🚫 Чего избегать

1. Хранения конфиденциальных данных без шифрования
2. Бесконечного накопления несинхронизированных данных
3. Игнорирования конфликтов данных при синхронизации

💡 Продвинутые техники

1. Дельта-синхронизация – передавайте только изменения
2. Конфликт-менеджмент – стратегии разрешения противоречий
3. Прогрессивная загрузка – сначала кэш, потом обновления

Как вы реализуете оффлайн-режим? Делитесь решениями в комментариях 💬

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤‍🔥2
2025/07/14 14:33:50
Back to Top
HTML Embed Code: