我想要的只是一个简单的动画,当scrollview移动时.我已经尝试了一些解决方案,但没有一个能够完美/顺利地工作.如果我滚动,我想用滑动动画隐藏工厂,如果在2秒后没有任何反应,那么工厂就会显示滑动动画.我知道这是一个基本问题,我很感激你的态度.
提前致谢.
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按钮.
原文链接:https://www.f2er.com/android/430619.html基本上:
>使用v22.2.1支持v4库,有一个show()和hide()方法,用于执行浮动动作按钮的淡入和淡出动画
>您必须将ScrollView和FAB放在CoordinatorLayout中.
>将FAB layout_anchor设置为ScrollView的id
>创建一个类并扩展FloatingActionButton.Behavior类并将其设置为布局xml中的FAB的layout_behavior属性
>重写您的Behavior类onStartNestedScroll以检查是否为垂直
>覆盖您的Behavior类onStopNestedScroll以在downscroll上调用子级(FAB)参数hide()方法并postDelay一个Runnable以在2秒后显示FAB
布局如:
我建议,还要在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,int dxConsumed,int dyConsumed,int dxUnconsumed,int dyUnconsumed) {
super.onNestedScroll(coordinatorLayout,dxConsumed,dyConsumed,dxUnconsumed,dyUnconsumed);
if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
handler.removeCallbacks(showRunnable);
handler.postDelayed(showRunnable,2000);
child.hide();
}
}
}