Android浮动操作按钮动画

t0thkr1s

当滚动视图移动时,我只需要一个简单的动画。我已经尝试了一些解决方案,但没有一个能完美/流畅地工作。如果我滚动,我想用向下滑动动画来隐藏晶圆厂,如果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;
  }
});
ky

这是一个教程,如何将FAB按钮与滚动动画一起使用。

基本上:

  1. 使用v22.2.1支持v4库,有一个show()andhide()方法为Floating Action Buttons执行淡入和淡出动画。
  2. 您必须将您ScrollView和FAB放在CoordinatorLayout中。
  3. 将FABlayout_anchor设置为ScrollView's id
  4. 创建一个类并扩展FloatingActionButton.Behavior该类并将其设置layout_behavior为布局xml中的FAB属性
  5. 覆盖您的Behavior类onStartNestedScroll以检查垂直
  6. 覆盖您的Behavior类onStopNestedScrollhide()在向下滚动时调用子代的(FAB)参数方法,并延迟Runnable2秒后显示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>

我建议也创建一个Handler到Behavior类中以调用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();
    } 
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章