1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/luckyjayce-ViewPagerIndicator

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

ViewPagerIndicator

  1. Поддержка пользовательских стилей вкладок.

  2. Поддержка настраиваемых стилей и расположения скользящих блоков.

  3. Поддержка настройки эффектов перехода при переключении между вкладками.

  4. Поддержка предварительной загрузки и кэширования данных для подэкранов.

  5. Возможность настройки подвижности интерфейса.

  6. android:minSdkVersion="8" android:targetSdkVersion="25".

  7. Способ импорта:

  • Gradle-импорт:
    compile 'com.shizhefei:ViewPagerIndicator:1.1.4'.
    Поскольку используются v4 и recyclerview, их также необходимо импортировать:
    compile 'com.android.support:support-v4:23.4.0'.
    compile 'com.android.support:recyclerview-v7:23.4.0'.
  • Импорт через jar-пакет:
    Download Library JAR.

Download sample Apk.

  1. Информация о версиях и обновлениях:
    https://github.com/LuckyJayce/ViewPagerIndicator/releases.

Использование

package com.shizhefei.indicator.guide;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;

import com.shizhefei.indicator.R;
import com.shizhefei.view.indicator.Indicator;
import com.shizhefei.view.indicator.IndicatorViewPager;
import com.shizhefei.view.indicator.IndicatorViewPager.IndicatorPagerAdapter;
import com.shizhefei.view.indicator.IndicatorViewPager.IndicatorViewPagerAdapter;

public class GuideActivity extends FragmentActivity {
    private IndicatorViewPager indicatorViewPager;
    private LayoutInflater inflate;

    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        setContentView(R.layout.activity_guide);
        ViewPager viewPager = (ViewPager) findViewById(R.id.guide_viewPager);
        Indicator indicator = (Indicator) findViewById(R.id.guide_indicator);
        // 将viewPager和indicator使用
        indicatorViewPager = new IndicatorViewPager(indicator, viewPager);
        inflate = LayoutInflater.from(getApplicationContext());
        // 设置indicatorViewPager的适配тор
        indicatorViewPager.setAdapter(adapter);
    }

    private IndicatorPagerAdapter adapter = new IndicatorViewPagerAdapter() {
        private int[] images = { R.drawable.p1, R.drawable.p2, R.drawable.p3,
                R.drawable.p4 };

        /**
         * 获取tab
         */
        @Override
        public View getViewForTab(int position, View convertView,
                ViewGroup container) {
            if (convertView == null) {
                convertView = inflate.inflate(R.layout.tab_guide, container,
                        false);
            }
            return convertView;
        }

        /**
         * 获取每一个界面
         */
        @Override
        public View getViewForPage(int position, View convertView,
                ViewGroup container) {
            if (convertView == null) {
                convertView = new View(getApplicationContext());
                convertView.setLayoutParams(new LayoutParams(
                        LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
            }
            convertView.setBackgroundResource(images[position]);
            return convertView;
        }

        /**
         * 获取界面数量
         */
        @Override
        public int getCount() {
            return images.length;
        }
    };
}

Эффект:

Есть возможность реализовать следующие макеты с помощью этой библиотеки:

  • image.
  • image.
  • image.
  • image.

Также можно посмотреть демонстрацию работы в формате gif:

image.

Основные классы:

1. ViewPager

Эта версия может использовать нативную версию android-support-v4 после. 1. Нет перезаписи ViewPager.

Ранее перезаписанный ViewPager setPrepareNumber был заменён на LazyFragment для реализации ленивой загрузки. Ранее setCanScroll был перенесён в подкласс SViewPager.

2. Использование LazyFragment в сочетании с setOffscreenPageLimit ViewPager для ленивой загрузки интерфейса и предотвращения повторного создания интерфейса.

2. Indicator

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

  • Indicator
    • setCurrentItem(int item, boolean anim) — устанавливает текущий элемент.

    • setOnTransitionListener(OnTransitionListener onTransitionListener) — устанавливает анимацию перехода вкладки.

    • setOnItemSelectListener(OnItemSelectedListener onItemSelectedListener) — устанавливает прослушиватель переключения вкладок.

    • setScrollBar(ScrollBar scrollBar) — устанавливает полосу прокрутки, которая следует за движением вкладки.

    • 1. FixedIndicatorView в основном используется для фиксированного размера, чтобы равномерно распределять вкладки.

      • setSplitMethod(int splitMethod) — устанавливает метод разделения вкладок: равномерное разделение, разделение по переносу, разделение по весу.
      • setCenterView(View centerView, ViewGroup.LayoutParams layoutParams) — устанавливает представление, отображаемое в центре вкладки, используется для реализации нижнего плюса Weibo.
      • getCenterView();
    • 2. ScrollIndicatorView в основном используется, когда несколько вкладок могут прокручиваться.

      • setSplitAuto(boolean splitAuto) — устанавливает, будет ли разделение происходить автоматически. Когда общая ширина вкладки меньше ширины индикатора, она разделяется равномерно или по весу. Если она больше ширины индикатора, то происходит разделение по переносу.
      • setPinnedTabView(boolean isPinnedTabView) — устанавливает, закреплена ли первая вкладка.
      • setPinnedShadow(Drawable shadowDrawable, int shadowWidth) — устанавливает тень закреплённой вкладки.
    • 3. RecyclerIndicatorView в основном используется, когда можно прокручивать бесконечное количество вкладок.

      • Преимущество заключается в том, что он подходит для случаев с большим количеством вкладок, а недостаток — в том, что у него нет функции автоматического разделения, как у ScrollIndicatorVie, когда вкладок мало.

3. indicatorViewPager

Используется для объединения ViewPager и Indicator.

indicatorViewPager.setAdapter(IndicatorPagerAdapter adapter) — позволяет настраивать переходные эффекты, такие как изменение шрифта и цвета во время движения, и т. д.

indicatorViewPager.setIndicatorOnTransitionListener(onTransitionListener); — позволяет настраивать стиль полосы прокрутки.

indicatorViewPager.setIndicatorScrollBar(scrollBar); — позволяет устанавливать, можно ли переключать страницы.

indicatorViewPager.setPageCanScroll(false); — устанавливает количество страниц, которые можно кэшировать слева и справа, и они не будут воссозданы. По умолчанию — 1, что означает, что одна страница слева и одна страница справа будут кэшироваться вместе с текущей страницей.

indicatorViewPager.setPageOffscreenLimit(1); — устанавливает количество предварительно загруженных страниц. По умолчанию — 1, что означает, что одна страница будет загружена вместе с текущей.

indicatorViewPager.setPagePrepareNumber(1); — устанавливает слушателя изменения страницы.

indicatorViewPager.setOnIndicatorPageChangeListener(onIndicatorPageChangeListener); — устанавливает интервал между страницами.

indicatorViewPager.setPageMargin(1); — устанавливает изображение между страницами.

indicatorViewPager.setPageMarginDrawable(d); — объединяет Indicator и ViewPager, используя методы, аналогичные IndicatorViewPager.

##4. BannerComponent (бесконечный баннер) ##

Наследует от IndicatorViewPager, поэтому его использование аналогично IndicatorViewPager.

setAutoPlayTime(long time) — устанавливает временной интервал автоматической игры.

startAutoPlay(); — начинает игру.

stopAutoPlay(); — останавливает игру.

##5. IndicatorPagerAdapter ##

Имеет два подкласса: IndicatorFragmentPagerAdapter для фрагментов и IndicatorViewPagerAdapter для представлений.

Устанавливает слушатель изменения страницы с помощью indicatorViewPager.setOnIndicatorPageChangeListener(onIndicatorPageChangeListener).

Indicator может использоваться отдельно или совместно с viewpager через indicatorViewPager.

##6. ScrollBar ##

Полоса прокрутки вкладки устанавливается с помощью indicatorViewPager.setIndicatorScrollBar(scrollBar).

Есть следующие подклассы:

ColorBar — цветная полоса прокрутки;

DrawableBar — полоса прокрутки с изображением;

LayoutBar — полоса прокрутки макета;

TextWidthColorBar — полоса прокрутки шириной с текст вкладки;

SpringBar — круглая полоса прокрутки с эффектом перетаскивания. Этот класс модифицирован из https://github.com/chenupt/SpringIndicator.

##7. OnTransitionListener ##

Имеет следующие подклассы:

OnTransitionTextListener — эффект изменения шрифта и размера текста вкладки.

##8. LazyFragment (ленивая загрузка фрагмента) ##

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

Принцип работы: изначально onCreateView просто загружает пустой FrameLayout. При использовании методов onCreateView и setUserVisibleHint для определения необходимости загрузки реального макета реальный макет добавляется в ранее пустой FrameLayout.

Методы обратного вызова:

onCreateViewLazy соответствует onCreateView;

onDestroyViewLazy соответствует onDestroyView;

onResumeLazy соответствует onResume;

onPauseLazy соответствует onPause;

методы onCreate и onDestroy не меняются;

добавлен onFragmentStartLazy, вызываемый при отображении фрагмента, который можно использовать для определения того, отображается ли он при переключении страниц ViewPager;

вызывается onFragmentStopLazy, когда фрагмент не отображается.

Все методы с суффиксом lazy означают, что реальный макет отображается.

Использование: не беспокойтесь о создании макета в onCreateViewLazy. Инициализируйте данные. Вызывайте этот метод, когда интерфейс должен отображаться. Выполните операции освобождения в методе onDestroyViewLazy.

Основные библиотеки

  1. https://github.com/LuckyJayce/ViewPagerIndicator — Indicator заменяет tabhost и реализует такие эффекты, как верхняя панель веб-сайтов, нижняя панель главного экрана Weibo, направляющие страницы и бесконечные баннеры, с высокой степенью настройки вкладок и эффектов.

  2. https://github.com/LuckyJayce/MVCHelper Реализация выпадающего обновления, прокрутка внизу для автоматической загрузки дополнительных данных, постраничная загрузка, автоматическое переключение отображения макета при сбое сети, макет «нет данных», поддержка любого view, поддержка переключения основного потока выпадающего обновления фреймворка.

3. https://github.com/LuckyJayce/MultiTypeView
Упрощение адаптера RecyclerView для различных типов, возможность динамического добавления Fragment в RecyclerView, реализация сложного интерфейса путём разделения на несколько модулей разработки.

4. https://github.com/LuckyJayce/EventBus
Шина событий, публикация и приём событий через динамический интерфейс прокси. Определение интерфейса для отправки событий зарегистрированным классам, реализующим этот интерфейс.

5. https://github.com/LuckyJayce/LargeImage
Загрузка больших изображений, полезно для изучения.

6. https://github.com/LuckyJayce/GuideHelper
Страница руководства для новичков, простая реализация отображения подсказок и демонстрации функций на соответствующем view для пользователя.

7. https://github.com/LuckyJayce/HVScrollView
Двунаправленная прокрутка ScrollView, поддерживает вложенную прокрутку ScrollView, позволяет настраивать поддерживаемые направления прокрутки.

8. https://github.com/LuckyJayce/CoolRefreshView
Выпадающее обновление RefreshView, поддерживает обновление любого View, поддерживает настраиваемый Header, поддерживает события NestedScrollingParent и NestedScrollingChild, вложенные ViewPager не конфликтуют с событиями.

С этими библиотеками классов вы сможете достичь новых высот.

Примечание

Проект ViewPagerIndicator_Demo является примером кода. После просмотра этого примера вы удивитесь, обнаружив, что все вкладки реализованы через viewpager, без использования tabhost, а все формы вкладок реализованы с помощью Indicator. Проект ViewPagerIndicator_Library является библиотекой классов.

Если у вас есть какие-либо предложения, вы можете отправить их на мою электронную почту 794629068@qq.com.

Контакты и предложения по вопросам

  • Weibo: http://weibo.com/u/3181073384
  • QQ группа: для общения и решения вопросов по использованию открытых проектов: 549284336 (Open Source Shengyi)

License

Copyright 2014 shizhefei(LuckyJayce)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

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

Вы можете оставить комментарий после Вход в систему

Введение

Заменить Android TabHost, реализовать скользящие вкладки, эффекты стартовой страницы и т. д. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/luckyjayce-ViewPagerIndicator.git
git@api.gitlife.ru:oschina-mirror/luckyjayce-ViewPagerIndicator.git
oschina-mirror
luckyjayce-ViewPagerIndicator
luckyjayce-ViewPagerIndicator
master