यहाँ a tutorial, कैसे स्क्रॉल एनीमेशन के साथ फैब बटन का उपयोग करने के लिए।
मूल रूप से
:
- उपयोग v22.2.1 समर्थन v4 पुस्तकालय, वहाँ एक
show()
और hide()
विधि है कि फ्लोटिंग क्रिया बटन
- आप जगह चाहिए के लिए फीका-इन और फीका-बाहर एनिमेशन करता है आपके
ScrollView
और एक CoordinatorLayout के अंदर एफएबी।
ScrollView's
id
- को फैब
layout_anchor
सेट एक कक्षा बनाएं और FloatingActionButton.Behavior
वर्ग का विस्तार करने और लेआउट एक्सएमएल
- में फैब के
layout_behavior
विशेषता के लिए सेट खड़ी है की जाँच करने के लिए अपने व्यवहार वर्ग onStartNestedScroll
ओवरराइड
- बच्चे के (एफएबी) पैरामीटर
hide()
पर कॉल करने के लिए अपने व्यवहार वर्ग onStopNestedScroll
को ओवरराइड करें और 2 सेकंड
के बाद FAB दिखाने के लिए
Runnable
पर क्लिक करें
लेआउट की तरह:
<android.support.design.widget.CoordinatorLayout
... >
<ScrollView
android:id="@+id/myList"
...
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
app:layout_anchor="@id/myList"
app:layout_behavior="package.CustomScrollAwareBehavior"
...
/>
</android.support.design.widget.CoordinatorLayout>
मेरा सुझाव है, यह भी व्यवहार वर्ग में एक Handler
बनाने के लिए फैब के show()
विधि कॉल करने के। व्यवहार वर्ग (परीक्षण नहीं किया गया):
public class CustomScrollAwareBehavior extends FloatingActionButton.Behavior{
private Handler handler = new Handler();
private FloatingActionButton fab;
public CustomScrollAwareBehavior(Context context, AttributeSet attrs) {
super();
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout,
FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {
fab = child;
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL ||
super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target,
nestedScrollAxes);
}
Runnable showRunnable = new Runnable() {
@Override
public void run() {
fab.show();
}
};
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child,
View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed,
dyUnconsumed);
if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
handler.removeCallbacks(showRunnable);
handler.postDelayed(showRunnable,2000);
child.hide();
}
}
}
धन्यवाद !! बहुत सटीक उत्तर, मैं इस समाधान Asap कोशिश करेंगे। – tothkris