Поведение прокрутки appbarlayout: несколько просмотров с разными прокруткамиAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Поведение прокрутки appbarlayout: несколько просмотров с разными прокрутками

Сообщение Anonymous »

Я работаю над макетом Android, где мне нужно следующее поведение, используя ComportanatorLayout, Appbarlayout и CollapsingToolbarlayout:
Предполагаемое поведение: поведение, которое я собираюсь, наиболее близко к экрану профиля Instagram. Контент (в этом случае, ограничение).
Когда пользователь прокручивает, панель инструментов должна быть Enteralways, становясь видимым, как только пользователь прокручивает. Как нормально.
segmentedtablayout:
segmentedtablayout должен вести себя аналогично панели инструментов, но энтерал перед панелью инструментов. Пробое:
Я попытался установить различные mayout_scrollflags для каждого элемента, но поведение не совсем то, что мне нужно, или они полностью игнорируются. При добавлении нескольких представлений с различными scroll_flags
я также попытался настройка режима коллапса на панели инструментов программатически, чтобы достичь предполагаемого поведения, я был довольно близко, но когда пользователь прокручивает вниз, в то время как ограничение все еще видно, панель инструментов защелкивается в PIN -код, что не то, что я хочу.

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




























< /code>
Это мое представление пейджер фрагмент Xml.  < /p>





< /code>
Код я попытался написать, чтобы настроить PIN < /p>
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.segmentedTabLayout.setTabs(listOf("Overview", "Activity", "Settings")) { index ->
when (index) {
0 -> {
println("1")
}
1 -> {
println("2")
}
2 -> {
println("3")
}
}
}

val adapter = SplitPagerAdapter(this)
binding.viewPager.adapter = adapter

var totalScrollDistance = 0
var toolbarHeight = 0
var isPinned = false
var lastOffset = 0
var isScrollingUp = false

// Get the toolbar height when the layout is ready
binding.fragmentToolbar.viewTreeObserver.addOnGlobalLayoutListener {
toolbarHeight = binding.fragmentToolbar.height
}

var maxVerticalOffset: Int = binding.appBarLayout.getHeight()
binding.collapsingToolbar.viewTreeObserver.addOnGlobalLayoutListener {
maxVerticalOffset = binding.collapsingToolbar.height
}

binding.appBarLayout.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { _, verticalOffset ->
println("verticalOffset: $verticalOffset")
println("lastOffset: $lastOffset")
if (toolbarHeight == 0) return@OnOffsetChangedListener // Ensure toolbarHeight is initialized

// Calculate the scroll change since the last offset
val scrollChange = verticalOffset - lastOffset

if (scrollChange > 0) {
// Scrolling up
if (!isPinned) {
// Pin the toolbar only when scrolling up
setToolbarPinned(true)
isPinned = true
}
isScrollingUp = true
} else if (scrollChange < 0) {
// Scrolling down
totalScrollDistance += scrollChange

// Unpin only after scrolling down by at least the toolbar height
if (totalScrollDistance < -toolbarHeight && isPinned) {
setToolbarPinned(false)
isPinned = false
}
isScrollingUp = false
}

// Update the last vertical offset to track scrolling
lastOffset = verticalOffset
})
}

private fun setToolbarPinned(pin: Boolean) {
val params = binding.fragmentToolbar.layoutParams as CollapsingToolbarLayout.LayoutParams
params.collapseMode = if (pin) {
CollapsingToolbarLayout.LayoutParams.COLLAPSE_MODE_PIN
} else {
CollapsingToolbarLayout.LayoutParams.COLLAPSE_MODE_OFF
}
binding.fragmentToolbar.layoutParams = params
}
Этот вопрос, вероятно, самый близкий, который я могу найти к моей проблеме, но это не совсем правильно.

Подробнее здесь: https://stackoverflow.com/questions/795 ... crollflags
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»