J'ai utilisé cette bibliothèque dans mon code. En fait, j'ai un ScrollView sur le panneau SlidingUp. Le code est le suivant :
<cheesebaron.slidinguppanel.SlidingUpPanelLayout
android:id="@+id/sliding_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom">
<android.support.v4.view.ViewPager
android:id="@+id/HomeFrameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ScrollView
android:id="@+id/slidingPanelScrollView"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:background="@android:color/transparent"
android:clickable="true"
android:focusable="false">
<RelativeLayout
android:layout_height="match_parent"
android:layout_width="match_parent">
<RelativeLayout
android:id="@+id/cardHolderRelativeLayout"
android:layout_height="match_parent"
android:layout_width="380dp"
android:background="@android:color/transparent"
android:layout_centerHorizontal="true"
android:padding="10dp">
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_height="250dp"
android:layout_width="match_parent"
android:background="#FF0000"
android:layout_marginBottom="15dp" />
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_height="250dp"
android:layout_width="match_parent"
android:background="#00FF00"
android:layout_marginBottom="15dp"
android:layout_below="@id/linearLayout1" />
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_height="250dp"
android:layout_width="match_parent"
android:background="#0000FF"
android:layout_marginBottom="15dp"
android:layout_below="@id/linearLayout2" />
<LinearLayout
android:id="@+id/linearLayout4"
android:layout_height="250dp"
android:layout_width="match_parent"
android:background="#0000FF"
android:layout_marginBottom="15dp"
android:layout_below="@id/linearLayout2" />
</RelativeLayout>
</RelativeLayout>
</ScrollView>
</cheesebaron.slidinguppanel.SlidingUpPanelLayout>
Ce que je veux obtenir, c'est que, si le SlidingUpPanelLayout est étendu, l'utilisateur puisse faire défiler le ScrollView. Si le ScrollView est déroulé jusqu'en haut (l'utilisateur fait défiler la page vers le bas sur son téléphone) et que l'utilisateur continue à faire défiler la page vers le bas, le SlidingUpPanelLayout doit s'effondrer.
Je mets en œuvre le code suivant :
_slidingUpPanelLayout.NestedScrollingEnabled = true ;
_scrollView.ViewTreeObserver.ScrollChanged += (sender, e) =>
{
var y = _scrollView.ScrollY;
if (y < -20)
{
_slidingUpPanelLayout.SlidingEnabled = true;
}
};
_slidingUpPanelLayout.PanelExpanded += (sender, args) =>
{
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MatchParent, RelativeLayout.LayoutParams.MatchParent);
_cardHolderRelativeLayout.LayoutParameters = layoutParams;
_slidingUpPanelLayout.SlidingEnabled = false;
};
En fait, j'ai défini SlidingEnable sur true/false pour modifier l'écouteur d'événements de défilement.
Cependant, il y a un problème avec le ScrollView. Il ne se déclenche que lorsque le ScrollView est défilé vers le haut, puis vers le bas.
Quoi qu'il en soit, je ne pense pas que mon approche soit une bonne approche. Avez-vous des suggestions ? Par ailleurs, lorsque je regarde la bibliothèque AndroidSlidingUpPanel sur Android native, il semble qu'elle prenne déjà en charge ScrollView dans SlidingUpPanelLayout. Je ne sais pas si j'ai raison ou non.
Je ne suis pas non plus certain qu'il y ait quelque chose à faire avec NestedScrollingEnabled = true pour le panneau SlidingUp ou non, mais j'ai vu pas mal de recommandations sur Stackoverflow.
A la vôtre,