当 ScrollView 移动时,我想要的只是一个简单的动画。我尝试了一些解决方案,但没有一个能完美/流畅地工作。如果我滚动,我想隐藏带有向下滑动动画的 fab,如果 2 秒后没有任何反应,fab 会显示带有向上滑动动画。我知道这是一个基本问题,感谢您的耐心等待。
提前致谢。
final ScrollView scroll = (ScrollView) v.findViewById(R.id.sw);
scroll.setOnTouchListener(new View.OnTouchListener()){
@Override
public boolean onTouch(View v, Motionevent event){
int action = event.getAction();
if (action == Motionevent.ACTION_MOVE){
//slide down animation here
}else{
new Handler().postDelayed(new Runnable(){
public void run(){
//slide up animation here
}
}, 2000);
}
return false;
}
});
最佳答案
这是 a tutorial , 如何使用带有滚动动画的 FAB 按钮。
基本上:
- 使用 v22.2.1 支持的 v4 库,有一个
show()
和hide()
方法可以为 Floating 执行淡入淡出动画操作按钮 - 您必须将
ScrollView
和 FAB 放在 CoordinatorLayout 中。 - 将 FAB
layout_anchor
设置为ScrollView 的
id
- 创建一个类并扩展
FloatingActionButton.Behavior
类并在布局xml中将其设置为FAB的layout_behavior
属性 - 重写您的 Behavior 类
onStartNestedScroll
以检查是否垂直 - 覆盖您的行为类
onStopNestedScroll
以在向下滚动时调用子 (FAB) 参数hide()
方法,并在Runnable
后延迟以显示2 秒后 FAB
布局如下:
<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>
我建议,还要在 Behavior 类中创建一个 Handler
来调用 FAB 的 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();
}
}
}
关于Android float 操作按钮动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023580/