Всем привет! Я хочу поделиться историей о том, как обычная пользовательская боль заставила меня открыть Android Studio и сделать свой первый серьезный проект.
Я очень люблю читать с телефона (особенно ранобэ, новеллы и книги в оригинале). Но в последнее время индустрия мобильных читалок свернула куда-то не туда. Открывая популярные приложения, я чувствовал себя пилотом Боинга: десятки перегруженных меню, всплывающие баннеры, просьбы купить Premium-подписку и интерфейсы прямиком из 2012 года.
Но моей главной болью был перевод. Когда ты читаешь книгу на английском и встречаешь незнакомое слово, тебе приходится выделять его, копировать, открывать Google Переводчик, вставлять, читать, возвращаться в книгу… Погружение в историю рушится моментально.
Есть, конечно, Circle to Search или читалки с функцией перевода, но мне они показались максимально неудобными
Я искал минималистичную читалку со встроенным удобным переводчиком. Не нашел. И решил написать её сам.
Как я изобретал велосипед (и почему отказался от WebView)
Поначалу казалось, что написать читалку легко: просто закидываешь HTML-текст книги в стандартный компонент браузера (WebView) и готово.
Но оказалось, что WebView жрет батарею, тормозит при перелистывании и не дает нормально кастомизировать текст. Поэтому я пошел по хардкору: написал свой собственный кастомный движок рендеринга текста.Он берет сырой текст из EPUB/FB2, сам измеряет каждую букву, нарезает текст на страницы прямо под размер вашего экрана и плавно их листает. Никаких подтормаживаний.
Так как я отказался от стандартных системных компонентов, мне пришлось писать логику выделения текста с нуля. Пришлось вручную высчитывать координаты пальца на экране, сопоставлять их с конкретной буквой в отрисованном абзаце и рисовать кастомные ползунки-«капельки» по краям.
Но самая главная проблема — это сохранение цитат. Если вы меняете размер шрифта или отступы, текст перестраивается. Чтобы выделения не съезжали и не ломались, я привязал их к абсолютному индексу символа (железобетонному якорю) от начала главы. Теперь вы можете как угодно крутить настройки дизайна — ваши цитаты и закладки всегда останутся ровно на том самом слове.
Что получилось в итоге? MRead
Я назвал приложение MRead (Minimal Reader). Это полностью локальная, бесплатная читалка без рекламы, созданная для того, чтобы вы оставались наедине с книгой.
Умные онлайн-инструменты, то, ради чего всё затевалось. Выделяете слово или абзац — и прямо в книге всплывает окно с переводом на ваш язык. А если нужно узнать значение английского слова — там же работает толковый словарь (через API Wiktionary).
Поддержка форматов EPUB, FB2, FB2.ZIP, TXT. Движок сам вытаскивает обложки и иллюстрации из недр файлов.
Никакого визуального мусора. Светлая, темная и кремовая (моя любимая) темы.
Можно загружать свои любимые шрифты (.ttf / .otf), менять отступы, межстрочный интервал.
Приложение работает локально. У меня нет бэкенда, нет серверов, никто не собирает вашу статистику чтения.
Планы на будущее
Проект полностью бесплатный, писался на чистом энтузиазме. Если вам нравится концепция чистого чтения без компромиссов — буду рад, если вы его попробуете.
Скачать MRead можно здесь:
Я буду мониторить комментарии. Если найдете баги (а они наверняка есть, это же первый релиз) или у вас есть крутые идеи, что можно добавить — пишите, всё читаю, всё беру на карандаш!
Спасибо за внимание, и приятного чтения! 📖
Добавил полезных функций и исправил баги
Теперь можно добавить целую папку с книгами или выделить сразу сотню файлов. Главная кнопка + обзавелась анимацией.
В библиотеке появилась иконка галочки. Выделяйте сколько угодно книг, чтобы удалить их разом или закинуть на нужную полку.
Любую книгу теперь можно скрыть. Она исчезнет из общего списка и переместится на специальную системную полку «Скрытые» в самом низу.
Добавлено выравнивание «По ширине» и умные переносы слов. Движок сам распознает, на каком языке написана книга, и расставляет переносы по правильным словарям.
Кнопки отступов заменены на плавные ползунки. Теперь, когда вы тянете ползунок, текст перестраивается в реальном времени.
🛠 Улучшения и исправления:
Исправлено зависание на Xiaomi при выборе слишком большой красной строки.
Теперь в темной теме цветные маркеры не выжигают глаза (включено мягкое свечение), а в светлой теме текст внутри маркера принудительно становится черным для идеального контраста.
Теперь системная кнопка «Назад» работает логично - она закрывает сноски, снимает выделение текста или выходит с полки, а не выкидывает сразу из приложения.
Заголовки глав и частей теперь автоматически выравниваются строго по центру страницы.
Улучшена поддержка TalkBack для незрячих пользователей (настройки теперь корректно озвучиваются как переключатели).
Исправлены съезжающие тексты на кнопках в диалогах.
UPD:
✨ Новые функции:
• Поддержка PDF! Теперь в библиотеку можно добавлять PDF-файлы. Иинтегрирован легкий системный движок, который не раздувает размер приложения. Поддерживается сохранение прогресса, закладки, свайпы и плавное масштабирование (зум) двумя пальцами.
• Умная Темная тема для PDF. Заботимся о ваших глазах, при включении серой или темной темы цвета PDF-документа автоматически инвертируются (ослепительно белый фон становится черным).
• Быстрый переход по страницам. Сделайте долгое нажатие по счетчику страниц. Откроется окно перехода, где вы еще до прыжка увидите название главы, в которую попадете!
• Поворот экрана. В меню добавлена настройка ориентации экрана: Авто, Портретный (вертикальный) или Альбомный (горизонтальный) режимы. Движок мгновенно перестроит текст под любой формат.
• Блокировка экрана (Защита от касаний). В настройках кнопок громкости появилась иконка «Замочка». Включите её, и случайные тапы или свайпы по экрану перестанут перелистывать страницы — идеально для чтения лежа, в транспорте или под дождем.
🛠 Улучшения и исправления:
• Меню «Настройки текста» переименовано в «Настройки чтения».
• Оптимизировано потребление оперативной памяти: PDF-страницы загружаются в экономном цветовом формате (RGB_565), что ускорило их рендер.
• Почищен интерфейс: убраны дублирующиеся ссылки на разработчика.