ไลบรารีนี้เป็นการนำแนวคิดตัวกรองไปใช้ที่โพสต์บน MaterialUp.com
มันทำให้ภาพเคลื่อนไหวของ FloatingActionButton ไปยัง BottomSheetDialog ใช้งานง่าย
เกรเดิล
เพิ่มการพึ่งพาให้กับไฟล์ build.gradle ระดับแอปของคุณ:
dependencies {
implementation ' io.github.krupen:fabulousfilter:0.0.6 '
}
สร้าง Fragment ที่ขยาย 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
}
}
สร้างมุมมองสำหรับส่วนที่มีองค์ประกอบหลัก 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>
เริ่มแฟรกเมนต์เมื่อคลิก FloatingActionButton ดังต่อไปนี้:
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MySampleFabFragment dialogFrag = MySampleFabFragment.newInstance();
dialogFrag.setParentFab(fab);
dialogFrag.show(getSupportFragmentManager(), dialogFrag.getTag());
}
});
พารามิเตอร์นี้ระบุ ViewGroup ของแผ่นงานด้านล่างที่จะแสดงหลังจากภาพเคลื่อนไหวสิ้นสุดลง อาจเป็น ViewGroup ใดก็ได้ (LinearLayout/FrameLayout ฯลฯ ):
setViewMain(relativelayout_content);
พารามิเตอร์นี้ระบุมุมมองที่สูงเกินจริงสำหรับกล่องโต้ตอบ:
setMainContentView(contentDialogView);
พารามิเตอร์นี้ตั้งค่าระยะเวลาภาพเคลื่อนไหวของการแปลและปรับขนาดภาพเคลื่อนไหวเป็น milliseconds
:
setAnimationDuration(600); // default 500ms
พารามิเตอร์นี้ใช้เพื่อตั้งค่าตัวประมาณค่าสำหรับภาพเคลื่อนไหว fab:
setInterpolator(new AccelerateDecelerateInterpolator());
พารามิเตอร์นี้ตั้งค่าความสูงของการมองของแผ่นงานด้านล่างเป็น dp
:
setPeekHeight(300); // default 400dp
พารามิเตอร์นี้ใช้เพื่อรับการติดต่อกลับจาก AAH_FabulousFragment
ไปยังส่วนประกอบที่เรียกมัน:
setCallbacks((Callbacks) getActivity());
หากต้องการใช้งาน ให้ใช้การเรียกกลับในองค์ประกอบการเรียก (กิจกรรม/แฟรกเมนต์ ฯลฯ) ตัวอย่าง:
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
}
}
}
พารามิเตอร์นี้ใช้เพื่อรับการเรียกกลับของภาพเคลื่อนไหว
setAnimationListener((AnimationListener) getActivity());
หากต้องการใช้งาน ให้ใช้ AnimationListener ในองค์ประกอบการเรียก (กิจกรรม/แฟรกเมนต์ ฯลฯ) ตัวอย่าง:
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
}
}
พารามิเตอร์นี้ใช้เพื่อทำให้มุมมองในแผ่นงานด้านล่างคงที่เมื่อผู้ใช้เลื่อน อาจเป็น ViewGroup ใดก็ได้ (LinearLayout/FrameLayout ฯลฯ ):
setViewgroupStatic(linearlayout_buttons);
พารามิเตอร์นี้ใช้เพื่อรองรับการเลื่อนใน ViewPager เนื่องจาก BottomSheetDialog ไม่รองรับหลายมุมมองด้วยการเลื่อน:
setViewPager(viewPager);
ลิขสิทธิ์ 2017 ครูเปน เกติยา
ได้รับอนุญาตภายใต้ Apache License เวอร์ชัน 2.0 ("ใบอนุญาต"); คุณไม่สามารถใช้ไฟล์นี้ได้เว้นแต่จะเป็นไปตามใบอนุญาต คุณสามารถขอรับสำเนาใบอนุญาตได้ที่
http://www.apache.org/licenses/LICENSE-2.0
เว้นแต่กฎหมายที่ใช้บังคับกำหนดหรือตกลงเป็นลายลักษณ์อักษร ซอฟต์แวร์ที่เผยแพร่ภายใต้ใบอนุญาตนี้จะถูกแจกจ่าย "ตามที่เป็น" โดยไม่มีการรับประกันหรือเงื่อนไขใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ดูใบอนุญาตสำหรับภาษาเฉพาะที่ควบคุมการอนุญาตและข้อจำกัดภายใต้ใบอนุญาต