Неделю на Хабре бушуют страсти по программе Яндекс.Метро. Давно его не включал, решил посмотреть ещё раз. И вдруг поймал себя на мысли, что приложение раздражает меня.
Не спорю, это отличное приложение для курьеров, гостей и определённой категории пассажиров, которым удобны автоматическое определение местоположения, поиск станций, вычисление времени в пути и т.п.
Но коренные москвичи, которые всю сознательную жизнь добираются на метро со своих спальных районов на работу, в гости, на свидание и футбол, приблизительно знают расположение станций и пользуются схемой только для того, чтобы освежить память и уточнить, где лучше сделать пересадку. Всё!
Что происходит с Яндекс.Метро. Я запускаю приложение и первым делом оно начинает искать обновления. Зачем? Вроде станции метро открываются не каждый час, к чему такая спешка. Ладно, пара секунд прошла. Далее запускается программа. Одно неосторожное касание пальцем и на экране всплывают какие-то кнопки: Показать на карте (???), Название станции, Отсюда, Сюда. Напоминает поведение некоторых сайтов, обвешанных рекламой и всплывающими окнами. При этом, оказывается, они ещё что-то отсылают на свои сервера, забирая ресурсы у моего устройства.
Осознав, что использую 1% от всей функциональности хорошего приложения, наткнулся на несколько комментариев гиков, которые просто сфоткали схему и пользуются ей. Вспомнил, что до появления Яндекс.Метро, а может ещё раньше, на Windows Mobile 5.0, я поступал также. Меня не устраивала только одна деталь — искать схему метро в Галерее среди множества картинок не хотелось.
И тогда я решил написать свою простенькую программу с незамысловатым названием Метро.Просто схема для Android. Самое смешное, мне даже не пришлось писать код для неё. Копировать-вставить. От создания проекта до размещения приложения в Google Play прошло около 30 минут.
Схему метро и логотип в векторе я взял на сайте Студии А.Лебедева. Про схему там явно написано — бери и пользуйся. Про логотип условия пользования не нашёл. Написал лично Артемию, благо он свою электронную почту не скрывает. Минут через пятнадцать получил ответ — можно.
Сконвертировал векторные изображения в PNG. На сайте Android Asset Studio создал значки. Запустил проект и разместил значки в нужных подпапках. Далее выбрал тему без заголовка, чтобы увеличить полезное пространство.
Для размещения картинок в Android используется компонент ImageView. Но из коробки он не поддерживает масштабирование и обработку жестов. Но в своё время я сохранил в закладках ссылку на библиотеку TouchImageView. Вчера, просматривая свои закладки, я увидел позабытую ссылку и подумал, что надо бы её изучить. Сегодня решил проверить, а не подойдёт ли она к моему приложению. Библиотека — это было слишком громко сказано. Достаточно скопировать класс, расширяющий ImageView, и вставить в своей проект.
Размещаем компонент в разметке
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<ru.alexanderklimov.metrosimpeschema.TouchImageView
android:id="@+id/imageViewSchema"
android:src="@drawable/moscow_metro"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
Всё! Запускаем программу и любуемся. Компонент из коробки поддерживает касания двумя пальцами, двойной тап и движение картинки под пальцем. Всё тоже самое, что и Яндекс.карты.
Проверил на стареньком Samsung S2, затем на планшете и новом телефоне. Меня устраивает полностью. Скриншоты сильно сжал для экономии, поэтому они немного невзрачные.
Если кому-то нужно, адрес в Google Play — Метро.Просто схема.
Исходный код не привожу, любой программист сможет воспроизвести мои действия самостоятельно.
Автор: tehnolog