Pustaka ini adalah implementasi konsep filter yang diposting di MaterialUp.com.
Itu membuat animasi FloatingActionButton ke BottomSheetDialog mudah diimplementasikan.
Gradle
Tambahkan ketergantungan ke file build.gradle tingkat aplikasi Anda:
dependencies {
implementation ' io.github.krupen:fabulousfilter:0.0.6 '
}
Buat Fragmen yang memperluas 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
}
}
Buat tampilan untuk fragmen yang memiliki elemen induk 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>
Mulai fragmen dengan mengklik FloatingActionButton seperti di bawah ini:
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MySampleFabFragment dialogFrag = MySampleFabFragment.newInstance();
dialogFrag.setParentFab(fab);
dialogFrag.show(getSupportFragmentManager(), dialogFrag.getTag());
}
});
Parameter ini menentukan ViewGroup pada sheet terbawah yang akan ditampilkan setelah animasi berakhir. Itu bisa berupa ViewGroup apa saja (LinearLayout/FrameLayout dll):
setViewMain(relativelayout_content);
Parameter ini menentukan tampilan dialog yang diperluas:
setMainContentView(contentDialogView);
Parameter ini menetapkan durasi animasi terjemahan dan skala animasi dalam milliseconds
:
setAnimationDuration(600); // default 500ms
Parameter ini digunakan untuk mengatur interpolator untuk animasi hebat:
setInterpolator(new AccelerateDecelerateInterpolator());
Parameter ini menetapkan tinggi mengintip lembar bawah di dp
:
setPeekHeight(300); // default 400dp
Parameter ini digunakan untuk mendapatkan callback dari AAH_FabulousFragment
ke komponen yang memanggilnya:
setCallbacks((Callbacks) getActivity());
Untuk menggunakannya, implementasikan callback pada komponen pemanggil (Aktivitas/Fragmen dll), contoh:
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
}
}
}
Parameter ini digunakan untuk mendapatkan callback animasi.
setAnimationListener((AnimationListener) getActivity());
Untuk menggunakannya, implementasikan AnimationListener di komponen pemanggil (Aktivitas/Fragmen dll), contoh:
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
}
}
Parameter ini digunakan untuk membuat tampilan di Lembar Bawah menjadi statis saat pengguna menggesernya. Itu bisa berupa ViewGroup apa saja (LinearLayout/FrameLayout dll):
setViewgroupStatic(linearlayout_buttons);
Parameter ini digunakan untuk mendukung pengguliran di ViewPager karena BottomSheetDialog tidak mendukung banyak tampilan dengan pengguliran:
setViewPager(viewPager);
Hak Cipta 2017 Krupen Ghetiya
Berlisensi di bawah Lisensi Apache, Versi 2.0 ("Lisensi"); Anda tidak boleh menggunakan file ini kecuali sesuai dengan Lisensi. Anda dapat memperoleh salinan Lisensi di
http://www.apache.org/licenses/LICENSE-2.0
Kecuali diwajibkan oleh undang-undang yang berlaku atau disetujui secara tertulis, perangkat lunak yang didistribusikan berdasarkan Lisensi didistribusikan berdasarkan DASAR "APA ADANYA", TANPA JAMINAN ATAU KETENTUAN DALAM BENTUK APAPUN, baik tersurat maupun tersirat. Lihat Lisensi untuk bahasa tertentu yang mengatur izin dan batasan berdasarkan Lisensi.