Перелистывание календаря

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Перелистывание календаря

Сообщение neoksi » 21 авг 2012, 06:36

Привет, всем!

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

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

Реализую все 3мя View содержащими:
1) Выбранный месяц
2) Предыдущий месяц
3) Следующий месяц
При смене выбранного месяца, один из View перерисовывается.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Перелистывание календаря

Сообщение KamiSempai » 21 авг 2012, 11:47

Во второй ссылке показывают полноценную программу в которой используется этот механизм.
Принцип примерно в следующем:
Есть 3 страницы с объектом MonthView. Отображается средняя страница с выбранным месяцем. При перелистывании во всех MonthView месяц сдвигается и активной снова становится средняя страница. Таким образом создается иллюзия перелистывания.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Перелистывание календаря

Сообщение neoksi » 22 авг 2012, 12:11

KamiSempai, огромное спасибо! Теперь я понял, что они называли магией =)

П.С. Собираюсь сделать ещё индикатор перелистывания, так что придется мне сделать 5 View месяцев.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Перелистывание календаря

Сообщение KamiSempai » 22 авг 2012, 12:45

Не понял... Зачем 5? Что значит индикатор перелистывания?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Перелистывание календаря

Сообщение neoksi » 22 авг 2012, 13:00

KamiSempai писал(а):Не понял... Зачем 5? Что значит индикатор перелистывания?
Для отображения текущего месяца я использую компонент com.viewpagerindicator.TitlePageIndicator
Посередине он отображает текущий месяц, слева возможность выбрать предыдущий, а справа следующий. Чтоб на нем отобразить такую же магию, как у ViewPager, нужно в памяти держать 5 View, так как за раз, он отображает одновременно информацию заголовка из 3х View.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Перелистывание календаря

Сообщение KamiSempai » 22 авг 2012, 13:16

Не знаю как работает TitlePageIndicator, не работал с ним, так как в последних версиях support.v4 уже есть подобные индикаторы и я использую их.
Точно знаю, им хватит 3 View. Называются PagerTitleStrip и PagerTabStrip.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Перелистывание календаря

Сообщение neoksi » 22 авг 2012, 14:02

KamiSempai писал(а):Не знаю как работает TitlePageIndicator, не работал с ним, так как в последних версиях support.v4 уже есть подобные индикаторы и я использую их.
Точно знаю, им хватит 3 View. Называются PagerTitleStrip и PagerTabStrip.
TitlePageIndicator - его можно установить в любом месте и он просто цепляется к ViewPager и читает Тег из отображаемого View.

Я уже написал код и он работает супер, но столкнулся с тем, что высота ViewPager не устанавливается по высоте содержимого View, в xml я указываю следующее:

Код: Выделить всё

    <android.support.v4.view.ViewPager
        android:id="@+id/cal_body_pager_row"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        />
Но строка android:layout_height="wrap_content" не срабатывает и ViewPager растягивается на всю возможную высоту =(

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Перелистывание календаря

Сообщение neoksi » 22 авг 2012, 14:29

neoksi писал(а): Но строка android:layout_height="wrap_content" не срабатывает и ViewPager растягивается на всю возможную высоту =(
На сколько я понял ViewPager не поддерживает wrap_content и ему нужно изменять размер вручную, в коде. Только я не совсем понял как мне реализовать в данном случае...

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Перелистывание календаря

Сообщение math64 » 22 авг 2012, 14:34

У тебя задаётся одновременно и вес, и wrap_content. Нужно что-то одно.
Если нужно вычисление высоты по своему алгоритму - делай производный класс и переопределяй метод onMesure().

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Перелистывание календаря

Сообщение neoksi » 22 авг 2012, 14:39

math64 писал(а):У тебя задаётся одновременно и вес, и wrap_content. Нужно что-то одно.
Если нужно вычисление высоты по своему алгоритму - делай производный класс и переопределяй метод onMesure().
Даже убирая вес wrap_content не срабатывает, так как просто ViewPager его не поддерживает, решил особо не заморачиваться, так в месяце максимум может быть 6 строк с днями, то делаю статичный максимальный размер.

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Перелистывание календаря

Сообщение neoksi » 22 авг 2012, 15:48

KamiSempai писал(а):Не знаю как работает TitlePageIndicator, не работал с ним, так как в последних версиях support.v4 уже есть подобные индикаторы и я использую их.
Точно знаю, им хватит 3 View. Называются PagerTitleStrip и PagerTabStrip.
KamiSempai, ты был прав, 3 View полностью хватит. Перечитал код программы примера и увидел, что там тоже используется TitlePageIndicator, как и у меня, и вся магия делается через OnPageChangeListener индикатора. :D

Ответить