Saya telah membuat CollapsingToolbarLayout sederhana dan bekerja seperti pesona. Masalah saya adalah, jika saya mencoba menggunakan fling scroll pada tampilan gulungan bersarang , itu hanya berhenti ketika saya melepaskan jari saya. Pengguliran normal berfungsi seperti seharusnya.
Kode aktivitas saya tidak berubah => aktivitas kosong yang dibuat otomatis . (Saya baru saja mengklik buat aktivitas kosong baru di studio android dan belum mengedit XML).
Saya baca di sini, bahwa gerakan gulir pada tampilan gambar itu sendiri bermasalah, tetapi tidak, bahwa pengguliran itu sendiri bermasalah: lihat di sini .
Saya mencoba mengaktifkan "scrolling mulus" melalui kode java. Sepertinya jika saya menggulir cukup jauh sehingga tampilan gambar tidak terlihat lagi, gerakan melempar kemudian dikenali.
TLDR: Mengapa gerakan melempar tidak berfungsi selama imageview terlihat? Kode XML saya terlihat seperti ini:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/profile_app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/profile_collapsing_toolbar_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp"
android:fitsSystemWindows="true">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="420dp"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
android:src="@drawable/headerbg"
android:maxHeight="192dp"
app:layout_collapseMode="parallax"/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
app:layout_anchor="@id/profile_app_bar_layout"
app:layout_anchorGravity="bottom|right|end"
android:layout_height="@dimen/fab_size_normal"
android:layout_width="@dimen/fab_size_normal"
app:elevation="2dp"
app:pressedTranslationZ="12dp"
android:layout_marginRight="8dp"
android:layout_marginEnd="8dp"/>
<android.support.v4.widget.NestedScrollView
android:id="@+id/profile_content_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_gravity="fill_vertical"
android:minHeight="192dp"
android:overScrollMode="ifContentScrolls"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/LoremIpsum"/>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
sumber
ACTION_DOWN y=98 -> ACTION_MOVE y=-40 -> ACTION_MOVE y=-33 -> ACTION_UP y=97
. Sepertinya peristiwa sentuhan terakhir salah melaporkan dirinya sendiri sebagai peristiwa berikutnya yang pertama.nestedScrollView.getParent().requestDisallowInterceptTouchEvent(true);
ke tampilan gulir bersarang AndaJawaban:
Saya memiliki masalah yang persis sama dengan CollapsingToolbarLayout dengan ImageView di dalam dan NestedScrollView . Gulir ayun berhenti saat jari dilepaskan.
Namun, saya memperhatikan sesuatu yang aneh. Jika Anda mulai menggulir dengan jari Anda dari tampilan dengan OnClickListener (mis. Tombol), pengguliran lempar bekerja dengan sempurna.
Jadi saya memperbaikinya dengan solusi yang aneh. Setel OnClickListener (yang tidak melakukan apa-apa) pada turunan langsung NestedScrollView . Maka itu bekerja dengan sempurna!
Beri anak langsung (LinearLayout) sebuah id dan setel OnClickListener di Activity
Catatan:
Diuji menggunakan Support Design Library 25.0.1
CollapsingToolbarLayout dengan scrollFlags = "scroll | enterAlwaysCollapsed"
sumber
Saya tahu pertanyaan ini telah diajukan lebih dari setahun yang lalu tetapi masalah ini tampaknya masih belum terselesaikan di pustaka Dukungan / Desain. Anda dapat memberi bintang pada masalah ini sehingga masalah tersebut bergerak lebih jauh dalam antrian prioritas.
Yang mengatakan, saya mencoba sebagian besar solusi yang diposting untuk ini, termasuk yang oleh patrick-iv tidak berhasil. Satu-satunya cara agar saya dapat bekerja adalah dengan meniru lemparan dan menyebutnya secara terprogram jika sekumpulan kondisi tertentu terdeteksi di
onPreNestedScroll()
. Dalam beberapa jam debugging saya, saya perhatikan bahwaonNestedFling()
tidak pernah dipanggil ke atas (gulir ke bawah) melempar dan sepertinya dikonsumsi sebelum waktunya. Saya tidak dapat mengatakan dengan kepastian 100% ini akan bekerja untuk 100% implementasi tetapi bekerja cukup baik untuk penggunaan saya jadi saya akhirnya menyelesaikan ini, meskipun itu cukup hacky dan jelas bukan apa yang ingin saya lakukan.Dan terapkan ke AppBar
Demo CheeseSquare: Sebelum Sesudah
sumber
enterAlways
layout_ScrollFlag agar berfungsi, tetapi berfungsi dengan baik sekarangSaya mencoba solusi Floofer tetapi masih belum cukup baik untuk saya. Jadi saya datang dengan versi yang lebih baik dari Perilakunya. AppBarLayout sekarang mengembang dan menciut dengan mulus saat dilempar.
Catatan: Saya menggunakan refleksi untuk meretas jalan saya ke ini, jadi itu mungkin tidak berfungsi dengan sempurna dengan versi pustaka Desain Android yang berbeda dari 25.0.0.
Untuk menggunakannya, setel Behavior baru ke AppBarLayout Anda.
sumber
Jawaban ini memecahkan masalah ini untuk saya. Buat kustom
AppBarLayout.Behavior
seperti ini:dan tambahkan
AppBarLayout
seperti ini:sumber
Saya hanya memposting ini di sini agar orang lain tidak ketinggalan di Komentar. Jawaban oleh Jinang bekerja dengan baik, tetapi pujian untuk AntPachon karena menunjukkan metode yang jauh lebih sederhana untuk hal yang sama. Alih-alih menerapkan
OnClick
metode secaraChild of the NestedScrollView
terprogram, cara yang lebih baik adalah menyetelclickable=true
xml untuk anak.(Menggunakan contoh yang sama seperti Jinang )
sumber
Dalam kode :https://android.googlesource.com/platform/frameworks/support/+/master/core-ui/java/android/support/v4/widget/NestedScrollView.java#834
Ketika saya menggunakan fling scroll pada NestedScrollView terkadang "mIsBeingDragged = false", Jadi NestedScrollView tidak mengirimkan acara fling.
Ketika saya menghapus
if (mIsBeingDragged)
pernyataan itu.tidak akan ada masalah. Tetapi saya tidak tahu masalah serius apa lagi yang akan ditimbulkan
sumber