Android自定義FloatingActionButton滑動行為只隱藏不出現(xiàn)的問題小結(jié)
先來段Behavior代碼,網(wǎng)上關(guān)于FloatingActionButton(以下簡稱FAB)滑動的代碼很多了,參考一下。
public class FabBehavior extends FloatingActionButton.Behavior{
private static final Interpolator INTERPOLATOR = new FastOutSlowInInterpolator();
private boolean mIsAnimatingOut = false;
public FabBehavior(Context context, AttributeSet attrs) {
super();
}
@Override
public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
final View directTargetChild, final View target, final int nestedScrollAxes) {
// Ensure we react to vertical scrolling
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL
|| super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
}
@Override
public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
final View target, final int dxConsumed, final int dyConsumed,
final int dxUnconsumed, final int dyUnconsumed) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
if (dyConsumed > 0 && !this.mIsAnimatingOut && child.getVisibility() == View.VISIBLE) {
// User scrolled down and the FAB is currently visible -> hide the FAB
animateOut(child);
} else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
// User scrolled up and the FAB is currently not visible -> show the FAB
animateIn(child);
}
}
// Same animation that FloatingActionButton.Behavior uses to hide the FAB when the AppBarLayout exits
private void animateOut(final FloatingActionButton button) {
if (Build.VERSION.SDK_INT >= 14) {
ViewCompat.animate(button).translationY(button.getHeight() + getMarginBottom(button)).setInterpolator(INTERPOLATOR).withLayer()
.setListener(new ViewPropertyAnimatorListener() {
public void onAnimationStart(View view) {
FabBehavior.this.mIsAnimatingOut = true;
}
public void onAnimationCancel(View view) {
FabBehavior.this.mIsAnimatingOut = false;
}
public void onAnimationEnd(View view) {
FabBehavior.this.mIsAnimatingOut = false;
view.setVisibility(View.GONE);
}
}).start();
} else {
}
}
// Same animation that FloatingActionButton.Behavior uses to show the FAB when the AppBarLayout enters
private void animateIn(FloatingActionButton button) {
button.setVisibility(View.VISIBLE);
if (Build.VERSION.SDK_INT >= 14) {
ViewCompat.animate(button).translationY(0)
.setInterpolator(INTERPOLATOR).withLayer().setListener(null)
.start();
} else {
}
}
private int getMarginBottom(View v) {
int marginBottom = 0;
final ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
if (layoutParams instanceof ViewGroup.MarginLayoutParams) {
marginBottom = ((ViewGroup.MarginLayoutParams) layoutParams).bottomMargin;
}
return marginBottom;
}
}
這是自定義的一個Behavior類,主要在onNestedScroll中自定義了出現(xiàn)和消失的動畫。使用的時(shí)候,在xml文件中給FAB加一個包含完整behavior類名的layout_behavior屬性
app:layout_behavior="com.normalframe.widgets.view.FabBehavior"
這樣FAB就會隨著列表上滑消失,下滑出現(xiàn)。這個功能主要是要處理FAB的位置會使列表最后一項(xiàng)被擋住的問題,當(dāng)上滑時(shí),F(xiàn)AB隱藏,這樣當(dāng)?shù)竭_(dá)列表底部最后一項(xiàng)時(shí),由于剛剛的動作是上滑動作,所以FAB處于隱藏狀態(tài),不會遮擋到列表。
在寫這個功能時(shí),發(fā)現(xiàn)了一個問題:
上滑時(shí)FAB能夠正常隱藏,但是下拉列表時(shí),F(xiàn)AB就不出現(xiàn)了。
而一樣的代碼如果放到其它項(xiàng)目中,有些又可以正常實(shí)現(xiàn)功能。Debug的時(shí)候發(fā)現(xiàn),上拉時(shí)會調(diào)用onNestedScroll,于是其中自定義的隱藏方法可以被調(diào)用,但下滑時(shí),不調(diào)用onNestedScroll。
以上所述是小編給大家介紹的Android自定義FloatingActionButton滑動行為只隱藏不出現(xiàn)的問題小結(jié),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Android仿知乎懸浮功能按鈕FloatingActionButton效果
- Android自定義可拖拽的懸浮按鈕DragFloatingActionButton
- 修改Android FloatingActionButton的title的文字顏色及背景顏色實(shí)例詳解
- Android中FloatingActionButton實(shí)現(xiàn)懸浮按鈕實(shí)例
- Android懸浮按鈕點(diǎn)擊返回頂部FloatingActionButton
- Android 中FloatingActionButton(懸浮按鈕)實(shí)例詳解
- Android中Fab(FloatingActionButton)實(shí)現(xiàn)上下滑動的漸變效果
- Android中FloatingActionButton的顯示與隱藏示例
- Android自定義APP全局懸浮按鈕
- Android開發(fā)懸浮按鈕 Floating ActionButton的實(shí)現(xiàn)方法
- Android開發(fā)之FloatingActionButton懸浮按鈕基本使用、字體、顏色用法示例
相關(guān)文章
Flutter 快速實(shí)現(xiàn)聊天會話列表效果示例詳解
這篇文章主要為大家介紹了Flutter 快速實(shí)現(xiàn)聊天會話列表效果示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
ExpandableListView實(shí)現(xiàn)二級列表購物車
這篇文章主要為大家詳細(xì)介紹了ExpandableListView實(shí)現(xiàn)二級列表購物車,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
Android OkHttp 結(jié)合php 多圖片上傳實(shí)例
本篇文章主要介紹了Android OkHttp 結(jié)合php 多圖片上傳實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
基于Android10渲染Surface的創(chuàng)建過程
這篇文章主要介紹了基于Android10渲染Surface的創(chuàng)建過程,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
Android自定義textview實(shí)現(xiàn)豎直滾動跑馬燈效果
這篇文章主要為大家詳細(xì)介紹了Android自定義textview實(shí)現(xiàn)豎直滾動跑馬燈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
android?studio實(shí)現(xiàn)簡易的計(jì)算器
這篇文章主要為大家詳細(xì)介紹了android?studio實(shí)現(xiàn)簡易的計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Android自定義控件之繼承ViewGroup創(chuàng)建新容器
這篇文章主要介紹了Android自定義控件之繼承ViewGroup創(chuàng)建新容器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12

