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

OSCHINA-MIRROR/scwang90-SmartRefreshLayout

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
md_smart.md 6.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 19:29 a9766b7

Интеллектуальные возможности SmartRefreshLayout

Что такое интеллект? В чём его польза?

Интеллект в основном проявляется в умении SmartRefreshLayout автоматически распознавать неизвестный макет. Это позволяет нам более эффективно реализовывать необходимые функции, а также создавать необычные функции.

Давайте рассмотрим интеллектуальные особенности SmartRefreshLayout на примере пользовательского Header и вложенного макета в качестве содержимого.

Пользовательский Header

Рассмотрим пример псевдокода:

    <SmartRefreshLayout>
        <ClassicsHeader/>
        <TextView/>
        <ClassicsFooter/>
    </SmartRefreshLayout>

В предварительном просмотре Android Studio эффект выглядит следующим образом:

Мы можем изменить код, заменив ClassicsHeader на простой TextView, чтобы увидеть, что произойдёт:

    <SmartRefreshLayout>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:gravity="center"
            android:background="#444"
            android:textColor="#fff"
            android:text="Посмотрим, станет ли он Header"/>
        <TextView/>
        <ClassicsFooter/>
    </SmartRefreshLayout>

Предварительный просмотр и эффект выполнения в Android Studio выглядят следующим образом:

Теперь мы заменили TextView на Header, но он ещё не двигается. Как сделать так, чтобы он двигался? Это очень просто. Существует множество GIF-файлов, которые можно найти в интернете. Например, «Тяни-тяни-тяни ~~ C4D» или «Путешествие по Токио за 30 дней: путеводитель в формате GIF».

Выберем один из них:

Далее мы изменим код:

compile 'pl.droidsonroids.gif:android-gif-drawable:1.2.3'//открытый исходный код gif-контрола
    <SmartRefreshLayout xmlns:app="http://schemas.android.com/apk/res-auto"
        app:srlDragRate="0.7"
        app:srlHeaderMaxDragRate="1.3">
        <pl.droidsonroids.gif.GifImageView
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:scaleType="centerCrop"
            android:src="@mipmap/gif_header_repast"
            app:layout_srlSpinnerStyle="Scale"
            app:layout_srlBackgroundColor="@android:color/transparent"/>
        <ListView/>
        <ClassicsFooter/>
    </SmartRefreshLayout>

Эффект предварительного просмотра и выполнения в Android Studio выглядит следующим образом:

Ха-ха! Мы создали собственный Header без написания ни одной строки кода Java.

Вложенный макет как содержимое

Если босс требует добавить фиксированный рекламный блок перед списком, как это сделать? Это легко. Обычно мы пишем такой код:

<LinearLayout
    android:orientation="vertical">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:gravity="center"
        android:text="Я именно тот рекламный блок, который требует босс"/>
    <SmartRefreshLayout>
        <ListView/>
    </SmartRefreshLayout>
</LinearLayout>

Однако при выполнении операции с прокруткой вниз мы обнаруживаем, что Header находится под рекламным блоком, что выглядит неудобно. На самом деле мы можем попробовать другой способ — поместить рекламный блок внутрь RefreshLayout и посмотреть, что получится:

<SmartRefreshLayout>
    <LinearLayout
        android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:gravity="center"
            android:text="Я именно тот рекламный блок, который требует босс"/>
        <ListView/>
    </LinearLayout>
</SmartRefreshLayout>

Поскольку псевдокод слишком прост, а эффект выполнения слишком уродлив, здесь мы представляем реальную ситуацию в реальном проекте:

Обратите внимание на правую картинку. Внимательно посмотрите на положение пальца при касании и эффект прокрутки. Можно заметить, что когда список уже прокручен до середины, лёгкое прокручивание списка не вызовет обновления, но если коснуться фиксированного макета, то оно может вызвать прокручивание. Из этого видно, что определение границ прокрутки SmartRefreshLayout является динамическим и интеллектуальным! Конечно, если интеллекта SmartRefreshLayout всё ещё недостаточно для вас, вы можете реализовать определение границ прокрутки самостоятельно через setListener, что будет более точным!

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/scwang90-SmartRefreshLayout.git
git@api.gitlife.ru:oschina-mirror/scwang90-SmartRefreshLayout.git
oschina-mirror
scwang90-SmartRefreshLayout
scwang90-SmartRefreshLayout
main