Cette bibliothèque est l'implémentation du concept de filtre publié sur MaterialUp.com.
Cela rend l'animation de FloatingActionButton vers BottomSheetDialog facile à mettre en œuvre.
Graduation
Ajoutez la dépendance à votre fichier build.gradle au niveau de l'application :
dependencies {
implementation ' io.github.krupen:fabulousfilter:0.0.6 '
}
Créez un Fragment qui étend AAH_FabulousFragment
:
public class MySampleFabFragment extends AAH_FabulousFragment {
public static MySampleFabFragment newInstance() {
MySampleFabFragment f = new MySampleFabFragment();
return f;
}
@Override
public void setupDialog(Dialog dialog, int style) {
View contentView = View.inflate(getContext(), R.layout.filter_sample_view, null);
RelativeLayout rl_content = (RelativeLayout) contentView.findViewById(R.id.rl_content);
LinearLayout ll_buttons = (LinearLayout) contentView.findViewById(R.id.ll_buttons);
contentView.findViewById(R.id.btn_close).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
closeFilter("closed");
}
});
//params to set
setAnimationDuration(600); //optional; default 500ms
setInterpolator(new AccelerateDecelerateInterpolator()); // optional
setPeekHeight(300); // optional; default 400dp
setCallbacks((Callbacks) getActivity()); //optional; to get back result
setAnimationListener((AnimationListener) getActivity()); //optional; to get animation callbacks
setViewgroupStatic(ll_buttons); // optional; layout to stick at bottom on slide
setViewPager(vp_types); //optional; if you use viewpager that has scrollview
setViewMain(rl_content); //necessary; main bottomsheet view
setMainContentView(contentView); // necessary; call at end before super
super.setupDialog(dialog, style); //call super at last
}
}
Créer une vue pour le fragment qui a l'élément parent AAH_FilterView
:
<com.allattentionhere.fabulousfilter.AAH_FilterView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rl_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:background="@color/orange"
android:visibility="invisible"
tools:ignore="MissingPrefix"
tools:visibility="visible">
<LinearLayout
android:id="@+id/ll_buttons"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_alignParentBottom="true"
android:background="@color/brown"
android:orientation="horizontal"
android:weightSum="2">
</LinearLayout>
</RelativeLayout>
</com.allattentionhere.fabulousfilter.AAH_FilterView>
Démarrez le fragment en cliquant sur FloatingActionButton comme ci-dessous :
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MySampleFabFragment dialogFrag = MySampleFabFragment.newInstance();
dialogFrag.setParentFab(fab);
dialogFrag.show(getSupportFragmentManager(), dialogFrag.getTag());
}
});
Ce paramètre spécifie le ViewGroup de la feuille inférieure à afficher une fois l'animation terminée. Il peut s'agir de n'importe quel ViewGroup (LinearLayout/FrameLayout etc) :
setViewMain(relativelayout_content);
Ce paramètre spécifie la vue gonflée de la boîte de dialogue :
setMainContentView(contentDialogView);
Ce paramètre définit la durée de l'animation de translation et de mise à l'échelle en milliseconds
:
setAnimationDuration(600); // default 500ms
Ce paramètre est utilisé pour définir l'interpolateur pour l'animation fab :
setInterpolator(new AccelerateDecelerateInterpolator());
Ce paramètre définit la hauteur d'aperçu de la feuille inférieure en dp
:
setPeekHeight(300); // default 400dp
Ce paramètre est utilisé pour obtenir un rappel de AAH_FabulousFragment
vers le composant qui l'a appelé :
setCallbacks((Callbacks) getActivity());
Pour l'utiliser, implémentez le rappel dans le composant appelant (Activité/Fragment etc), exemple :
public class MainSampleActivity extends AppCompatActivity implements AAH_FabulousFragment.Callbacks {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_sample);
}
@Override
public void onResult(Object result) {
if (result.toString().equalsIgnoreCase("swiped_down")) {
//do something or nothing
} else {
//handle result
}
}
}
Ce paramètre est utilisé pour obtenir des rappels d'animation.
setAnimationListener((AnimationListener) getActivity());
Pour l'utiliser, implémentez AnimationListener dans le composant appelant (Activity/Fragment etc), exemple :
public class MainSampleActivity extends AppCompatActivity implements AAH_FabulousFragment.AnimationListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_sample);
}
@Override
public void onOpenAnimationStart() {
//do something on open animation start
}
@Override
public void onOpenAnimationEnd() {
//do something on open animation end
}
@Override
public void onCloseAnimationStart() {
//do something on close animation start
}
@Override
public void onCloseAnimationEnd() {
//do something on close animation start
}
}
Ce paramètre est utilisé pour rendre la vue dans la feuille inférieure statique lorsque l'utilisateur la fait glisser. Il peut s'agir de n'importe quel ViewGroup (LinearLayout/FrameLayout etc) :
setViewgroupStatic(linearlayout_buttons);
Ce paramètre est utilisé pour prendre en charge le défilement dans ViewPager car BottomSheetDialog ne prend pas en charge plusieurs vues avec défilement :
setViewPager(viewPager);
Copyright 2017 Krupen Ghetiya
Sous licence Apache, version 2.0 (la « Licence » ); vous ne pouvez pas utiliser ce fichier sauf en conformité avec la licence. Vous pouvez obtenir une copie de la licence à
http://www.apache.org/licenses/LICENSE-2.0
Sauf disposition contraire de la loi applicable ou accord écrit, le logiciel distribué sous la licence est distribué « TEL QUEL », SANS GARANTIE OU CONDITION D'AUCUNE SORTE, expresse ou implicite. Consultez la licence pour connaître la langue spécifique régissant les autorisations et les limitations en vertu de la licence.