CollapsingToolbarLayout без onTouch?

Я предлагаю использовать непрерывную проверку вероятности и остальной части случайного числа.

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

Вероятности должны суммироваться с одним.

function getRandomIndexByProbability(probabilities) {
    var r = Math.random(),
        index = probabilities.length - 1;

    probabilities.some(function (probability, i) {
        if (r < probability) {
            index = i;
            return true;
        }
        r -= probability;
    });
    return index;
}

var i,
    probabilities = [0.8, 0.1, 0.1],
    count = probabilities.map(function () { return 0; });

for (i = 0; i < 1e6; i++) {
    count[getRandomIndexByProbability(probabilities)]++;
}

console.log(count);
.as-console-wrapper { max-height: 100% !important; top: 0; }

1
задан zihadrizkyef 16 January 2019 в 07:31
поделиться

3 ответа

В основном, CollapsingToolbarLayout не является View, но ViewGroup. Он наследует от FrameLayout и выступает в качестве контейнера для AppBarLayout, когда некоторые из представлений необходимо было свернуть / развернуть на основе поведения прокрутки панели приложения .

Итак, это оболочка для Toolbar, которая реализует сворачивающуюся панель приложения. Он предназначен для использования в качестве прямого потомка AppBarLayout.


Теперь к вашему вопросу:

" Так как CollapsingToolbarLayout можно свернуть / развернуть с помощью нашего пальца, но нет метода onTouch переопределить? "

Ответ прост, это не так. Это сам AppBarLayout, который перехватывает событие касания на основе слушателя OffsetChange и передает обратные вызовы его потомкам. У CollapsingToolbarLayout есть возможность анимировать заголовок панели инструментов (свернуть / развернуть) и некоторые другие вещи, такие как фоновое изображение, закрепление заголовка и т. Д., Поэтому, в основном, он реагирует на прослушиватель OffsetChange [1123] при получении обратных вызовов. 1117]

Проверьте официальную ссылку для более подробной информации.

0
ответ дан Jeel Vankhede 16 January 2019 в 07:31
поделиться

Это потому, что onTouch - не единственный способ взаимодействия с Views.

Для CollapsingToolbarLayout вам сначала нужно понять, что он предназначен для использования в качестве потомка AppBarLayout.

AppBarLayout - это в значительной степени вертикаль LinearLayout, которая используется для реализации множества функций, относящихся к Material Design, включая функции прокрутки. Другими словами, этот макет - это то, что обрабатывает прокрутку для дочернего представления.

В источнике CollapsingToolbarLayout, посмотрите на метод onAttachedToWindow(). Внутри этого метода вы увидите, что если родителем этой панели инструментов является AppBarLayout, то он установит пользовательский OffsetUpdateListener в метод своего родителя addOnOffsetChangedListener(). Посмотрите дальше вниз по источнику, чтобы увидеть определение его OffsetUpdateListener.

Это значит, что CollapsingToolbarLayout говорит своему родителю (AppBarLayout) сказать себе, есть ли какие-либо изменения в «смещении», которым является прокрутка.

Так что нет необходимости для CollapsingToolbarLayout иметь переопределение 'OnTouch', потому что оно не обрабатывает касания или прокрутку. Он просто позволяет своему родителю обрабатывать прокрутку, в то время как он просто сообщает родителю, чтобы он знал, когда он должен реагировать, другими словами ... когда он должен свернуться или развернуться.

0
ответ дан Jackey 16 January 2019 в 07:31
поделиться

они используют OnOffsetChangedListener, который является определением интерфейса для обратного вызова, который вызывается при изменении вертикального смещения AppBarLayout.

onOffsetChanged Вызывается, когда смещение макета AppBarLayout было изменено. Это позволяет дочерним представлениям реализовывать пользовательское поведение на основе смещения (например, закрепление представления с определенным значением y).

здесь ссылка OnOffsetChangedListener

0
ответ дан Khaled Qasem 16 January 2019 в 07:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: