11 февраля 2015 в 22:37

Метро.Просто схема


Неделю на Хабре бушуют страсти по программе Яндекс.Метро. Давно его не включал, решил посмотреть ещё раз. И вдруг поймал себя на мысли, что приложение раздражает меня.

Не спорю, это отличное приложение для курьеров, гостей и определённой категории пассажиров, которым удобны автоматическое определение местоположения, поиск станций, вычисление времени в пути и т.п.
Но коренные москвичи, которые всю сознательную жизнь добираются на метро со своих спальных районов на работу, в гости, на свидание и футбол, приблизительно знают расположение станций и пользуются схемой только для того, чтобы освежить память и уточнить, где лучше сделать пересадку. Всё!
Что происходит с Яндекс.Метро. Я запускаю приложение и первым делом оно начинает искать обновления. Зачем? Вроде станции метро открываются не каждый час, к чему такая спешка. Ладно, пара секунд прошла. Далее запускается программа. Одно неосторожное касание пальцем и на экране всплывают какие-то кнопки: Показать на карте (???), Название станции, Отсюда, Сюда. Напоминает поведение некоторых сайтов, обвешанных рекламой и всплывающими окнами. При этом, оказывается, они ещё что-то отсылают на свои сервера, забирая ресурсы у моего устройства.

Осознав, что использую 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 — Метро.Просто схема.

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

Upd. Хабр не позволяет писать две статьи подряд в рубрике «Я пиарюсь». Поэтому продолжение пришлось публиковать в своём блоге.
Метро.Москва.Часть вторая
Александр Климов @tehnolog
карма
35,0
рейтинг 0,0
Пользователь
Самое читаемое Разное

Комментарии (60)

  • +33
    Смотри, сейчас тебе в отзывах понапишут «а чо это прога не считает время в пути и определяет где я нахожусь?».
    • +23
      Я морально готов к этому.
      • +18
        А физически? (ง ͠° ͟ل͜ ͡°)ง
  • +16
    Не так давно бывал в Питере и использовал Яндексовое.Метро для ориентации в тамошнем метро. Никакого раздражения не было, открываю приложение, смотрю карту, закрываю приложение. Ничего случайно не тыкал и никаких всплывающих диалогов не наблюдал.
    • 0
      Я и не ругаю Яндекс. Хорошая у них программа. Буду в Питере, обязательно ею воспользуюсь.
      • +6
        Я к тому, что Яндекс.Метро это то же, что сделали вы, только для осторожных москвичей ;)

        Одно неосторожное касание пальцем и на экране всплывают какие-то кнопки
    • +3
      А мне яндексовские приложения регулярно предлагают поставить виджет быстрого доступа к поиску Яндекса.
      Вот уж и правда задолбали. Казалось-бы: отказался раз и всё. Но нет. Они упорные.
  • +14
    Чем это сильно лучше PNG в хорошем качестве в виде одного файла в локальном фотоальбоме?
    • +9
      Абсолютно ничем. В начале поста я написал об этом.
      • +3
        Можно просто сделать ярлык на картинку куда вам удобно.
        • +4
          Можно. Я разве вам запрещал?
        • +1
          Ярлык не сделать, например, на стоковом Nexus 5.
  • +33
    Ещё можно пользоваться бумажной карманной. Ничего на сервера не отправляет, кроссплатформенна, не жрёт аккумулятор. А в каждом вагоне есть стационарные с большой диагональю.
    • +3
      Была такая. Измялась, валяясь в сумке. А когда была нужна, то сумка по закону подлости оставалась дома. В вагоне бывает темно и много народу. Ситуации разные бывают.
      • –4
        А перед входом в метро разве не раздают такие, только маленькие?
    • 0
      Таки вы хотите сказать что PNG не кроссплатформенный?
  • +23
    По моему единственное для чего Яндекс.Метро вообще нужно это как раз показ времени и вагона из которого ближе идти до перехода.
    • –2
      Еще по пьяни можно понять на какую станцию зашел, если сеть ловит
      • +2
        вам не хватает надписей на самой станции?
        • –2
          по пьяни надпись еще найти надо, а так в руках телефон
  • –6
    зачем, когда есть Метро 24?
    • 0
      не та ветка
    • +8
      А также Метро-2033
      • 0
        да много каких ещё есть, которые не просто картинку показывают. когда писал комментарий, подразумевал «к примеру...»
  • +6
    Что вы там такое используете, что API Level: 16 Android 4.1 (JELLY_BEAN)? >_<
    • –6
      Ничего. Я же для себя писал. Совместимость мне требовалась. Фактически размер приложения равен размеру картинки
      • +3
        Если делали для себя — зачем выложили в г.плей? Зачем написали пост? Не ерничаю, просто интересуюсь.
        • +1
          Потому что допускаю, что кому-то тоже может пригодиться.
          • +3
            Может стоит допустить, что не у всех «версия Android 4.1 или более поздняя»?
            (и это для приложения, которое показывает картинку)
  • +23
    В треде типичная ситуация, парень сел, потратил свое время, разобрался и сделал то что и как ему нужно. Залил для всех, написал пост — пользуйтесь. В комментариях сразу сплошное не нужно и предложение альтернатив. Если не нужно или устраивает яндекс — вперед.

    Может если бы в сообществе чужие работы принимали с большим воодушевлением, может и проектов бы было больше хороших и разных и опенсорсных. На месте автора мне бы было очень обидно после таких комментариев.

    Автору — спасибо. Комментаторам — «сперва добейся».
    • –4
      сплошное не нужно и предложение альтернатив

      проектов бы было больше

      Скорее было бы больше ненужных велосипедов.
    • +7
      Спасибо за тёплые слова. Но это вполне ожидаемо. Я давно замечал, что русскоговорящая аудитория агрессивна в своих суждениях. А на буржуйских форумах народ доброжелательный. Увы.
      • 0
        Зато полезный совет скорее получишь на русскоязычном форуме, а у них лишь Cool да Nice.
        • +1
          Я в какой-то момент для решения проблем в разработке и администрировании перешёл исключительно на английский язык. Гораздо больше конструктива. Гораздо.
          У нас часто можно попасть на форум, где вся первая страница обсуждения будет заполнена «ненужно», а уже только на второй будет решение. Это, правда, иногда тоже даёт хорошие результаты — когда автор треда изначально выбрал неправильный подход и ему говорят, как это правильно делается. Но это происходит и на зарубежных форумах и сервисах типа StackOverflow, но там негатива меньше.
          Справедливости ради, стоит заметить, что в англоязычной части интернета просто больше ответов и это было основной причиной перейти на английский. Но проблему негатива это не отменяет.
          • 0
            На StackOverflow вообще фашизм и без меры рьяные модераторы. Если есть какая-то нетривиальная проблема, то ответа там либо не получишь, либо вообще вопрос закроют как оффтопик. Что на мой взгляд уже крайности.
    • +8
      Наверное, если бы вместо
      Исходный код не привожу, любой программист сможет воспроизвести мои действия самостоятельно.

      красовалась ссылка на гитхаб, то было бы проще отвечать на критику просто словами: «форкайтесь на здоровье и делайте пулл-реквесты».
    • +1
      Полностью согласен со всем, кроме «сперва добейся». Всегда очень удивляла эта фраза. Получается, что молочник не может в диалоге с ремонтниками указать им на тот факт, что они лампу к полу прикрепили вместо потолка?
  • +1
    А вам действительно нужен корневой FrameLayout? merge здесь не подходит?
    • 0
      Особо не нужен. Но программа настолько простая, что это никак не повлияет на производительность.
  • +8
    Лучше бы уж назвали программу как-то типа «Метро.МСК», чтобы это хоть как-то отображало суть — там ведь схема только московского метро.
    • +2
      Лучше и карту питерского метро в приложение добавить, чтоб соответствовать.
      • 0
        Тогда уж и остальныx 5.
        • 0
          Если так — то и Украины и Белоруссии (Минска). Только, боюсь, если это будут картинки в высоком разрешении (а-ля PNG), то занимать это приложение будет немало…
          • +1
            В общем, есть куда приложению развиваться, просто закачать все существующие карты всех городов, сделать выбор страны и города, и обновлять приложение по мере строительства новых станций. А начиналось всё так просто.
  • +2
    Я всё ещё надеюсь, что кто-нибудь подхватит разработку aMetro.
  • 0
    Google Play говорит, что ваше приложение не совместимо с Archos ARCHOS 80G9
    • 0
      А сейчас? Я добавил поддержку старых версий.
      • 0
        Теперь ОК
  • +1
    Троллинг 90 левела. Мне нравится. Сам пользуюсь картинкой из фотоальбома. Спасибо за работу, ведь всякий труд заслуживает уважения.
  • +1
    Интересна тема приложений — одной функции.

    Просто карта метро
    Просто пошли другу «Ё»
    Просто покажи на карте где ты сейчас

    • +2
      Просто фонарик — самый яркий представитель такого типа приложений. В обоих смыслах.
      • 0
        Слишком много разрешений просит этот «просто фонарик».
    • +1
      UNIX Way.
      • 0
        Оно и карту содержит, и отображением занимается, и масштабированием, и пользовательский ввод обрабатывает (pan & zoom). Не unix-way.
        • 0
          Фанатичное следование UNIX Way тоже ни к чему хорошему не приводит.
          • 0
            Фанатичное следование чему угодно ни к чему хорошему не приводит)
        • 0
          оно содержит только карту — отображением, масштабированием и обработкой пользовательского ввода занимается «библиотечный» компонент ОС
          Unix-way
          • 0
            Угу, с помощью «класса, расширяющего ImageView» (TouchImageView.java).

            Если упираться в unix-way то можно дойти до того, что ls должен отдавать только список файлов (по одному на строку), т к информацию о каждом (для отображения размера и прав, например) можно получить с помощью stat, сформатировать в n колонок с помощью col, раскрасить (по типам файлов) с помощью stat+file+sed и т. п. Но даже в классических unix'ах от этого далеко (достаточно вспомнить, что у простого каноничного ls более 30 ключей, управляющих отображением).

            Стоит признать, что следование unix-way — это из мира розовых пони. В реальности, конечно, полезно добиваться улучшения interoperability, но это всегда стоит дополнительных ресурсов, как при разработке, так и при использовании.
            Вспоминая Фредерика «наше всё» Брукса, можно дать оценку кратного увеличения стоимости разработки и развития в 3-9 раз, как минимум. По потерям в рантайме оценить и вовсе невозможно без конкретики.
  • –4
    Я бы воспользовался, но живу в городе, где нет метро :)
    Но автор в любом случае молодец. Сваял программку и выложил её, кому надо будет — воспользуются.
  • 0
    Это уж слишком «просто схема». Чем она лучше, чем скачанная из интернета хай-рез картинка схемы метро?
    Вам не нужен функционал — пожалуйста, но как насчет юзабилити? Яндексова карта почти целиком умещается у меня на экране с сохранением читабельности. А схема от студии Лебедева (кстати, он не начнет орать, если ваше приложение станет вдруг популярно?)) не оптимизировалась под малые размеры: там, например, огромные расстояния между соседними станциями на концах веток.
    Вроде как все современные лаунчеры умеют создавать ярлыки файлов, так что можно просто скачать вот это.

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